- 締切済み
テキストに格納しているデータの編集
昨日同じ質問のしたのですが、説明不足だったので書き直ししました。 大学で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);} ?> (フォームの部分も添付をしたかったのですが、行数の関係で入りませんでした。) 上記のプログラムですと、目的のユーザの次のユーザー情報が上書きされてしまいます。編集ボタンをクリックした時に、編集情報を目的ユーザの行に上書きをしたいのですが、どうすればよいのしょうか。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- moon_night
- ベストアンサー率32% (598/1831)
適当処理 いま適当に作ってみたので、動作するか疑問。 // ファイル読み込み $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);
- inu2
- ベストアンサー率33% (1229/3720)
個人情報をtextで保存するってのはよろしくないので、できればDBで稼動させたほうが、効率もよくなりますよ textで保存されていると排他処理が面倒な事と、へたするとファイルがぶっこわれますし、件数が多くなるとレスポンスが非常に遅くなります 課題で作成してるのでしょうが、個人情報を扱うのにtextっていうのは将来、実際に仕事で使うには意味の無いってことになりかねません textで保存するのは、メモ書き程度の事柄を(例えばカウンターとか、簡単なログとか)書いておき、万が一不特定多数の人に見られてしまっても問題の無い項目のみを保存させておきましょう http://サーバhost名/プログラムのディレクトリ/member.txt ってな感じでtextの場合はだれでも簡単に見られてしまう可能性だってあります(サーバの設定にもよりますが) 回答になってなくてすみません(-_-;)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
一般的に、不定長レコードを、あるレコードのみ直接に置き換えるということはできません。 ファイルをいったんメモリに全部読み込んで、編集した後更新したデータとして出力するか、 あるいは、ファイルを逐次処理しながら、テンポラリファイルに書き出し、古いファイルを削除し、テンポラリファイルの名前を変えるかします。 でも、質問文のような場合であれば、レコード数は少なくともDB(データベース)化して処理をするのがよろしいかと思います。 もし、PHP5を使っていれば特に別にサーバーを立てることなく、DBを作成し利用することができます。