質問: ### 前提・実現したいこと phpで簡易掲示板に指定された番号の投稿だけ削除できるようにする削除機能たいです。 ただ自分が初心者な事もあり、どこに何をつければいいのかが分かりません。 ここでも同じような質問がたくさんあったのでほぼすべて見てみましたが、自分とはコードの書き方が違っていて理解することが出来ませんでした。 if文で投稿フォームからの投稿か削除フォームからなのか条件分岐させて、foreachを使って1文ずつチェックし指定番号と投稿番号が一致していないときに書き込むことが最初のステップということまでは理解しましたが、それは今書き終えているコードの続きに書くのでしょうか?それともどこかに組み込むのでしょうか? また、「1文ずつチェックをする」には何をすればいいのかが分かりません。 初歩的な質問ではあると思いますがご教授お願いします・・・! コードはここまで書きました。 ### 該当のソースコード ``` mission3-3_new 【 投稿フォーム 】 名 前: コメント: 【 削除フォーム 】 投稿番号: ".$_POST["user"]."<>".$_POST["comment"]."<>".$date; fwrite($fp, $info."\r\n"); fclose($fp); ?> 【 投稿一覧 】 ",$hensuu); //投稿番号、氏名、コメント、日時を表示して改行する echo $splits[0].".".$splits[1].".".$splits[2].".".$splits[3].""; //繰り返し処理はここまで } } ?> ```
回答: > > どこに入れればいいのか > > > 削除後にまたリストを読み込んで最新の状態で出力することを加味すると、 **「データの読み込み処理より前」であればどこでも良い**ということになります。 ただ、 「画面出力」を伴わない処理は別にHTMLのドキュメント内に埋め込む必要はないと思います。 あくまで「処理を行うだけ」なので、投稿・編集・削除などの処理はまとめて``より上に移動しましょう。 そうすると見やすくなります。 (欲を言えば別ファイルにしてincludeしてもらいたい) > > foreachを使って1文ずつチェックし指定番号と投稿番号が一致していないときに書き込む > > > 表現と考え方の問題ですが「指定番号と投稿番号が一致していれば飛ばす。そうでなければ書き込む。」としたほうが良いです。 おそらくプログラム的には下記のようになるはずなので。 ``` if($delete_number == $row_number){ continue; } //書き込み ``` 設計的な観点からすると「プログラムを書く時のような表現にする」ほうが良いですね。 ※下記のようにするなら「違うとき書き込む」でも良いですけど個人的には「一致した情報を削除する」のが分かるような記述にしたいので。 ``` if($delete_number != $row_number){ //書き込み } ``` 他気になる点。 何度も出てくる定型的な文言は定数を使ったほうが良いかなと。 ``` define("COMMENT_LIST_FILE","mission_3-3_new.txt"); //中略 $hairetsu = file(COMMENT_LIST_FILE); ``` あと変数も意味がある名前をつけたほうが後から見返したときに見通しが良いです。 ``` $hairetsu = file("mission_3-3_new.txt"); foreach($hairetsu as $hensuu){ ``` ↓ ``` $comment_list = file("mission_3-3_new.txt"); foreach($comment_list as $comment_data){ ``` 下記のような記事も参考にしましょう。 * 初心者を戒めるPHP * PHP初心者は最低限これはやっとけ - 開発に入る前編 個人的には、 テキストファイルのデータベースを初心者の段階から学んでも使い道はほぼありません。 確かにファイルの扱いと文字列の扱いは覚えられるかもしれませんが、これをメインで進めていってもあまり利点は大きくないと思います。 学校でやっているなら仕方ない部分はありますが、なるべくデータベースの学習を個人的にでも勧めるようにしてください。 ※最も大事なのは「PHPマニュアルを活用できることになること」「エラーメッセージをしっかり読むこと」「デバッグを覚えること」 です。