![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
昨日同じ質問のしたのですが、説明不足だったので書き直ししました。
大学でPHPを勉強しています。ユーザー登録情報の編集のPHPプログラムです。フォームより、登録情報を編集し、テキストファイルに保存されます。
member.txt
yama|1234|yamada|hanako|0123-56-5432
suzu|3412|suzuki|tsutomu|0982-38-1937
左から順にユーザー名、パスワード、苗字、名前、電話番号がユーザー一人に対し1行です。
test.php
<?
$userid=yama;
if($userid=yama){
$listf=fopen("./member.txt","r");
$item=fgetcsv($listf,1024,"|");
while (!feof($listf)){
if($userid=$item[0]){
$Ofname=$item[2];
$Ogname=$item[3];
$Ophone=$item[4];
break;
}
$item=fgetcsv($listf,1024,"|");
}
fclose($listf);}
if($editPro=="on"){
$listf=fopen("./member.txt","r+");
rewind( $listf );
$data = fgetcsv($listf, 1024, "|");
while (!feof($listf)){
if ($userid==$data[0]){
$new_member="$userid" . "|". "$data[1]"."|". "$fname"."|" ."$gname"."|". "$phone\n";
fwrite($listf,$new_member);
break;
}
$data = fgetcsv($listf, 1024, "|");}
fclose($listf);} ?>
(フォームの部分も添付をしたかったのですが、行数の関係で入りませんでした。)
上記のプログラムですと、目的のユーザの次のユーザー情報が上書きされてしまいます。編集ボタンをクリックした時に、編集情報を目的ユーザの行に上書きをしたいのですが、どうすればよいのしょうか。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
適当処理
いま適当に作ってみたので、動作するか疑問。
// ファイル読み込み
$mem = file("member.txt");
$file = fopen("member.txt","w+");
foreach ($mem as $m) {
$mem_data = explode("|",$m);
if ($mem_data[0] == "$_POST['id']" and $mem_data[1] == "$_POST['pass']") {
fwrite($file,"$_POST['id']|$_POST['pass']|$_POST['fname']|$_POST['gname']|$_POST['phone']\n");
} else {
fwrite($file,$m);
}
}
fclose($file);
No.2
- 回答日時:
個人情報をtextで保存するってのはよろしくないので、できればDBで稼動させたほうが、効率もよくなりますよ
textで保存されていると排他処理が面倒な事と、へたするとファイルがぶっこわれますし、件数が多くなるとレスポンスが非常に遅くなります
課題で作成してるのでしょうが、個人情報を扱うのにtextっていうのは将来、実際に仕事で使うには意味の無いってことになりかねません
textで保存するのは、メモ書き程度の事柄を(例えばカウンターとか、簡単なログとか)書いておき、万が一不特定多数の人に見られてしまっても問題の無い項目のみを保存させておきましょう
http://サーバhost名/プログラムのディレクトリ/member.txt
ってな感じでtextの場合はだれでも簡単に見られてしまう可能性だってあります(サーバの設定にもよりますが)
回答になってなくてすみません(-_-;)
No.1
- 回答日時:
一般的に、不定長レコードを、あるレコードのみ直接に置き換えるということはできません。
ファイルをいったんメモリに全部読み込んで、編集した後更新したデータとして出力するか、
あるいは、ファイルを逐次処理しながら、テンポラリファイルに書き出し、古いファイルを削除し、テンポラリファイルの名前を変えるかします。
でも、質問文のような場合であれば、レコード数は少なくともDB(データベース)化して処理をするのがよろしいかと思います。
もし、PHP5を使っていれば特に別にサーバーを立てることなく、DBを作成し利用することができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Resource id #3 と表示されま...
-
PHP SimpleXml unsetについて
-
VC++の構造体について。
-
複数行のデータのPOST処理に関して
-
array_multisortについて
-
FortranのOPEN文
-
stdClass Objectを連想配列のよ...
-
自動で番号を振りたい
-
PHP検索ボックス複数設置
-
エラーメッセージ(無効な間接...
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
foreachのなかで次のキーを参照...
-
PHPのカッコ[ ]の使い方について
-
読み(あ行~わ行)ごとに分け...
-
連想配列のキー値(連番)を基...
-
PHP 配列の添字に変数は使えない?
-
foreachとかの勝手な省略?
-
漢字のソートについて
-
C言語の配列をPush(追加)する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
CSVファイルの最終行のデー...
-
stdClass Objectを連想配列のよ...
-
複数行のデータのPOST処理に関して
-
CSVでアップロードしたデータの...
-
自動で番号を振りたい
-
C言語でCSVファイルの行数を読...
-
ヒアドキュメントの中のfor文
-
FortranのOPEN文
-
行数が30万件ほどあるCSVから、...
-
バイナリファイルの内容を、そ...
-
消費者物価指数
-
エラーメッセージ(無効な間接...
-
rubyで複数列のデータを一行に...
-
CSVデータの行数カウントをした...
-
VBAでcsvファイルもシートもあ...
-
csvの内容を行単位で削除したい
-
preg_splitがうまくいかないの...
-
文字列の文字一文字ずつを解析...
おすすめ情報