• 締切済み

テキストに格納しているデータの編集

昨日同じ質問のしたのですが、説明不足だったので書き直ししました。 大学で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);} ?> (フォームの部分も添付をしたかったのですが、行数の関係で入りませんでした。) 上記のプログラムですと、目的のユーザの次のユーザー情報が上書きされてしまいます。編集ボタンをクリックした時に、編集情報を目的ユーザの行に上書きをしたいのですが、どうすればよいのしょうか。よろしくお願いします。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答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);

全文を見る
すると、全ての回答が全文表示されます。
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

個人情報をtextで保存するってのはよろしくないので、できればDBで稼動させたほうが、効率もよくなりますよ textで保存されていると排他処理が面倒な事と、へたするとファイルがぶっこわれますし、件数が多くなるとレスポンスが非常に遅くなります 課題で作成してるのでしょうが、個人情報を扱うのにtextっていうのは将来、実際に仕事で使うには意味の無いってことになりかねません textで保存するのは、メモ書き程度の事柄を(例えばカウンターとか、簡単なログとか)書いておき、万が一不特定多数の人に見られてしまっても問題の無い項目のみを保存させておきましょう http://サーバhost名/プログラムのディレクトリ/member.txt ってな感じでtextの場合はだれでも簡単に見られてしまう可能性だってあります(サーバの設定にもよりますが) 回答になってなくてすみません(-_-;)

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

一般的に、不定長レコードを、あるレコードのみ直接に置き換えるということはできません。 ファイルをいったんメモリに全部読み込んで、編集した後更新したデータとして出力するか、 あるいは、ファイルを逐次処理しながら、テンポラリファイルに書き出し、古いファイルを削除し、テンポラリファイルの名前を変えるかします。 でも、質問文のような場合であれば、レコード数は少なくともDB(データベース)化して処理をするのがよろしいかと思います。 もし、PHP5を使っていれば特に別にサーバーを立てることなく、DBを作成し利用することができます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • テキストに格納しているデータの編集

    大学でPHPを勉強しています。課題は簡易Blog作成でメンバー登録、ログイン、ログアウト、カレンダーはなんとか自分でできました。 問題は、ユーザー登録の編集です。ユーザー情報はテキストファイルに保存されてます。 member.txt yama|1234|yamada|hanako|0123-56-5432 suzu|3412|suzuki|tsutomu|0982-38-1937 左から順にユーザー名、パスワード、苗字、名前、電話番号がユーザー一人に対し1行です。 これらの登録情報を、HTMLのフォームから再編集してmember.txtに上書きをしたいのですが、うまくいきません。 お知恵をいただけないでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • ?をつけて送信してもだめでしょうか

    ちゃんと表示されるのは これを実行したときで <?php $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == 9999999){ echo $data[1]."<br>\n"; } } fclose($handle); ?> しかし <?php $codex = $_POST['code']; $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == $codex){ echo $data[1]."<br>\n"; } } fclose($handle); ?> このように入れて ~~.php?code=9999999 としても うまくいかないのです 何がおかしいのでしょうか

    • 締切済み
    • PHP
  • textファイルについて

    あるディレクトリーに test.txt aaa.txt があるのですが、 二つのテキストを開いて もし text.txtの3行目に http://www.goo.ne.jp/ があり aaa.txtの10行目にも http://www.goo.ne.jp/ があるとすれば aaa.txtの10行目を消したいのですが、 そんな事って可能ですか?? 色々考えたのですが、aaa.txtの10行目を消す時に 10行目を空にすると言う指定が出来なくて困ってます。 どうしてもaaa.txtの削除が出来ません。 参考までにスクリプトを載せておきます <?php $file_name = array("aaa.txt", "test.txt"); $list = fopen($file_name[0], "a+"); $delete_list = fopen($file_name[1], "r"); $listfile = file($file_name[0]); $listmax = count($listfile); $listfile = file($file_name[1]); $delete_listmax = count($listfile); if ($delete_listmax > 0){ for ($delete_line = 1; !feof($delete_list); $delete_line++){ $delete_lines = fgets($delete_list); $delete_lines = trim($delete_lines); if ($delete_lines){ if (is_file($file_name[0])){ for ($line = 1; !feof($list); $line++){ $lines = fgets($list); $lines = trim($lines); if ($lines){ if ($delete_lines == $lines){ //ここの部分がわからないです fputs($list, "あああ"); echo "O,K\n"; } } } } } } } fclose($delete_list); fclose($list); echo "\n終了\n"; ?> 詳しい方がいましたら宜しくお願いします

    • ベストアンサー
    • PHP
  • PHPファイルでテキストファイルのデータを編集(読み書き)する方法について

    ホームページ内の部分的な文章をブラウザ上で編集できるようにしたいのです。 その文章をテキストファイルに保存して、PHPファイルから、文章を編集する方法について教えてください。 以下は、ネット上で調べて、設定ファイルを編集するソースを利用させて頂いたものです。 イメージは、これで問題ないのですが、以下の場合、改行が含まれる文章の場合は動作しないのです。 設定ファイルを編集するように作られているので仕方ないのかなと思いますが、改行を含んだ文章も利用できるようになりますでしょうか? ##edit.php <?php $ini = parse_ini_file('config.ini'); if ($HTTP_POST_VARS['data1']) $ini['data1'] = $HTTP_POST_VARS['data1']; if ($HTTP_POST_VARS['data2']) $ini['data2'] = $HTTP_POST_VARS['data2']; if ($HTTP_POST_VARS['data3']) $ini['data3'] = $HTTP_POST_VARS['data3']; $fp = fopen('config.ini', 'w'); foreach ($ini as $k => $i) fputs($fp, "$k=$i\n"); fclose($fp); ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <input type="text" name="data1" value="<?php print $ini['data1'] ?>"><br> data2の変更 - <input type="text" name="data2" value="<?php print $ini['data2'] ?>"><br> data3の変更 - <input type="text" name="data3" value="<?php print $ini['data3'] ?>"><br> <input type="submit" value="送信"> </form> </body> </html> ##config.ini の中身 data1=タイトルです。 data2=サブタイトルです。 data3=本文です。 ↑改行した文章も対応したい。。iniファイルをtxtファイルにしないとだめ?

    • ベストアンサー
    • PHP
  • バイナリデータをテキストファイルに出力したい

    以下のソースファイル(test.c) が、 バイナリデータをテキストファイルに するものらしいのですが、 ファイル名(例えば bi.dat)を指定する方法が わかりません。 C++は勉強し始めたばかりで 詳しくありません。 よろしくお願い致します #include <stdio.h> int main( int argc, char *argv[]) { FILE *fpIn; FILE *fpOut; short snData; if( argc < 2) { printf("ファイル名を入れてください。"); return -1; } fpIn = fopen( "argv[1]" , "rb"); if( fpIn == NULL) { printf("入力ファイル %s を開けませんでした。", argv[1]); return -2; } fpOut = fopen( "output.txt", "w"); if( fpOut == NULL) { printf("出力ファイル output.txt を開けませんでした。"); fclose(fpIn); return -3; } while( fread( &snData, sizeof(short), 1, fpIn) == 1) { fprintf( fpOut, "%d\n", snData); }; fclose(fpIn); fclose(fpOut); return 0; }

  • テキストデータから指定行の削除

    phpでサイトを作っています。 テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか? -- data.txt -- aaa,data1, bbb,data1, ccc,data1, ddd,data1, -- php -- <?php $del=$_POST['del_no']; if($del!=""){ $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); if($data_array[0]!=$del){//削除データ以外を再書き込み $txt="$data_array[0],$data_array[1],\n"; $fp = fopen("data.txt", "w"); flock($fp,1); foreach ($txt as $line) {// 1行ずつファイルへ書き込み? fwrite($fp, $line); } fclose($fp); break; } } } ?> <b>data list</b> <? $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); echo "$data_array [0]<br />"; echo "<form method=\"post\">"; <input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST echo "<input type=\"submit\" value=\"削除\" />"; echo "</form>"; } ?> こうすると、テキストデータが白紙になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列n番目のデータの取得をしたい。

    初歩的な質問で恐縮です。 2次元配列形式で作った CSVファイル moromoro.txtがあります。 <?php $CsvData = fopen("./moromoro.txt","r"); $line=fgetcsv($CsvData,50,"\t"); print_r($line); ?> としてブラウザでみると Array ( [0] => abcd,efgh,kimn,qrst,uvwx)  とデータが入ります。ところが、データを取り出すため、 以下の通り4行目を追加しブラウザで見ても白いページだけになります。 01: <?php 02: $CsvData = fopen("./moromoro.txt","r"); 03: $line=fgetcsv($CsvData,50,"\t"); 04: list($aaa,$bbb)=$line; 05: return $aaa; 06: print_r($aaa); 076: ?>  ---------- 4行目以下を次のように変更しても 04: $ccc[]=$line[2]; 05: print_r($ccc); 06: ?> Array ( [0] => )  とだけが出てデータの取得が出来ません。何故でしょうか? どうすれば、配列n番目のデータを取り出すことができるでしょうか?

    • 締切済み
    • PHP
  • array をつかってcsv ファイルを作る

    もとになるcsvファイルから、いらない行を削除して新しいcsvファイルを作りたいです。 そこで、このようにしてみました。 $fptemp = fopen('data-temp.csv', "a+"); if (($handle = fopen('data.csv', "r")) !== FALSE) { while (($data= fgetcsv($handle)) !== FALSE) { if(条件){ $list = array($data); fputcsv($fptemp, $list); } } } fclose($handle); fclose($fptemp); ところが、結果の行にはすべてArray とだけ出力されます。 もとの行をそのまま出すにはどうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • テキスト→配列化→ソートをしたいのですが

    テキストファイル:test.txt 内容:カンマで区切られた数値で最大20個 を読み込んで配列に組み込んでその配列を昇順ソートする。 と言うC言語の課題が内定先の企業より出題されたのですが 今まではC#やデータベース中心だったので 全く解らず困っています。 #include <stdio.h> int main(void) { /* ファイルポインタ */ FILE *fp; int f; fp = fopen( "test.txt", "r" ); if( fp == NULL ) { puts( "test.txtが開けません" ); return 1; } while( 1 ) { f = fgetc( fp ); if( ferror( fp ) ) { /* fgetc関数に対するエラーチェック */ puts( "読み込み中にエラーが発生しました" ); fclose( fp ); return 1; } else if( feof( fp ) ) { break; } printf( "%c", f ); } printf( "\n" ); fclose( fp ); return 0; } } 他のサイト等を参考にファイルを読み込むまでは出来たのですが そこから先が全くわかりません・・・・orz どうかよろしくお願いしますm(_ _)m

  • ファイルを読み込み一部を書き換え

    ファイルを読み込み一部を書き換えたいです。 a.phpを読み込み$newという配列渡し、abcという文字があったら $dataのbbbに書き換えたいのですうまくいきません。 $data = "bbb"; $handle = @fopen("a.php", "r+"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle, 4096); $new = ereg_replace("abc", $data, $new); fwrite($fp,$new); } } fclose($handle); 助言お願いします。

    • ベストアンサー
    • PHP