簡易掲示板の削除機能に苦戦しています。
具体的には、削除指定番号以外のコメントもすべて消えてしまう状況です。
以下のコードを元に修正していただけると嬉しいです。
よろしくお願い致します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>mission_3-3-c</title> </head> <body> <form action="" method="post"> <input type="text" name="name" placeholder="名前"> <input type="text" name="comment" placeholder="コメント"> <input type="submit" name="submit" value="送信"> </form> <form action="" method="post"> <input type="text" name="deleteNo" placeholder="削除対象番号"> <input type="submit" name="submit" value="削除"> </form> <?php ini_set('display_errors','On'); $filename="mission_3-3-c.txt"; $time=date("Y年m月d日 H時i分s秒"); if (!isset($_POST["comment"]) || $_POST["comment"] == "") exit; $comment=$_POST["comment"]; if ($_POST["name"] == "") { $name = "匿名"; } else { $name = $_POST["name"]; } $number=1; if(file_exists($filename)) { $fp = fopen ($filename, "r"); if($fp == null) exit(1); for ($number=1; fgets($fp); $number++ ); } //書き込み if (isset($name) || isset($comment)) { $fp = fopen($filename, "a"); $sep = "<>"; $array = [$number, $name, $comment, $time]; $str = implode($sep, $array); fwrite ($fp, $str. PHP_EOL); fclose ($fp); $lines = file ($filename, FILE_IGNORE_NEW_LINES); foreach($lines as $line) { echo $line. "<br>"; } //削除 } elseif (isset($_POST["deleteNo"])) { $deleteNo = $_POST["deleteNo"]; $lines = file ($filename, FILE_IGNORE_NEW_LINES); $fp = fopen ($filename,"w"); foreach ($lines as $line) { $string = explode($sep, $line); $str = json_encode($string); if ($str[0] != $deleteNo) { fwrite ($fp, $str. PHP_EOL); echo $str[0], "", $str[1], "", $str[2], "", $str[3]. "<br>"; } } fclose ($fp); } ?> </body> </html>
同じようなスレがたくさんあるのは承知の上で質問させていただきます。
foreach ($lines as $line) { の$lineに値が入っているか、if ($str[0] != $deleteNo) {の判定直後がどうなっているか、あたりを確認したらよいのではないでしょうか。