![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
昨日同じ質問のしたのですが、説明不足だったので書き直ししました。
大学で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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- その他(プログラミング・Web制作) どうしてもエラーが解決できません。 1 2022/07/23 04:32
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでXMLを扱いたいのですが
-
自動で番号を振りたい
-
行数が30万件ほどあるCSVから、...
-
テキストに格納しているデータ...
-
パターンを取得する。
-
$_SESSIONに二次元配列を使える...
-
Ruby 2次元のハッシュ
-
PHP、{}記号の意味
-
file_existsでファイル名の部分...
-
MYSQLとPHPによって取得する多...
-
2次元配列の値の受け渡しについ...
-
正規表現でパターンマッチした...
-
array_intersectで空欄を比較し...
-
PHPで連想配列のプルダウンメニ...
-
【PHP】 重複した値を取り除く...
-
重複確認
-
思うような連想配列ができない・・
-
Mysqlとphpでソートや更新時の...
-
連想配列で値が空だったら、要...
-
配列の添え字が小数だとどうなる?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
Resource id #3 と表示されま...
-
stdClass Objectを連想配列のよ...
-
CSVデータの行数カウントをした...
-
ヒアドキュメントの中のfor文
-
複数行のデータのPOST処理に関して
-
While文を使って配列の中身を全...
-
C言語でCSVファイルの行数を読...
-
行数が30万件ほどあるCSVから、...
-
csvの内容を行単位で削除したい
-
CSVファイルの最終行のデー...
-
バイナリファイルの内容を、そ...
-
PHPで、CSVファイルを、指定し...
-
doxygenを使用する環境について
-
FortranのOPEN文
-
csvファイルを読み込み→上書き...
-
PHPでCSVの一部の行を編集したい
-
ラジオボタンのチェックの付け方。
-
Ethnaでのsection使用法
-
CSVデータを正規表現で抜き出せ...
おすすめ情報