質問: PHPを使ってテキストファイルを利用した掲示板を作成中です。 編集機能を実装したのですが、編集番号を送信したらその番号の投稿が元のフォームに記入されるようにしたいのに、うんともすんとも言いません。 色々な質問を見てみたのですが自分じゃわかりませんでした。 何か間違っているようでしたら教えていただきたいです。 追記 投稿番号<>名前<>コメント<>送信日時 という風にテキストファイルに保存しているのですが、 削除機能を実装した際に、投稿番号にずれが生じてしまいます。 番号の重複が起こらないようにしたいです。 どのようにしたらいいかアドバイスをお願いしたいです。 >>解決しました編集済み ``` keijiban.php ",$line); $num=0; if($num<$data[0]){ $num=$data[0]; } } $num++; $fp=fopen($filename,'a'); fwrite($fp,$num."<>".$name."<>".$comment."<>".$postedat."\n"); fclose($fp); } //削除 if (isset($_POST['delete'])){ $delete=$_POST['delete']; $lines=file($filename); $fp=fopen($filename,'w'); foreach($lines as $line){ $data=explode("<>",$line); if($data[0]!=$delete){ fwrite($fp,$line); } } fclose($fp); } //編集 $edit_num=$_POST['edit_num']; $lines=file($filename); foreach($lines as $line){ $data=explode('<>', $line[0]); if($edit_num==$editdata[0]){ $editdata0=$editdata[0]; $editdata1=$editdata[1]; $editdata2=$editdata[2]; $editdata3=$editdata[3]; } } if(isset($_POST['name'])&&($_POST['comment'])&&($_POST['edit'])){ $lines=file($filename); $fp=fopen($filename,'w'); $edit=$_POST['edit']; foreach($lines as $line){ $data=explode("<>",$line); if($data[0]==$edit){//投稿番号と編集番号が一致したとき上書き fwrite($fp,$edit."<>".$name."<>".$comment."<>".$postedat."\n"); }else{ fwrite($fp,$line); } fclose($fp); } } //表示 $lines=file($filename); foreach($lines as $line){ $data=explode("<>",$line); echo $data[0].$data[1].$data[2].$data[3]."\n"; } ?> 投稿: 削除: 編集: ```
回答: PHPのソースコードは上から順番に処理されますので、 の時点ではまだ変数に値がセットされていません。 PHPの処理をより上に記述すれば大丈夫です。 追記の質問ですが、HTML上はフォームが1つのため、 どのsbumitを操作しても全データが飛んできます。 submitにnameを付けて条件分岐すれば大丈夫だと思います。 また、今回の質問とは無関係ですが、セキュリティ対策が 為されていないので公開する際はご注意ください。