
ファイルの行を指定して削除したいです。
削除番号を指定して、削除するのですが、指定した番号+1の行が削除されてしまいます。
どの部分が間違えており、どのように修正すれば指定した行が削除するのか教えていただきたいです。
</html><?php $filename = 'mission3-3.txt'; $date = date("Y年m月d日 H時i分s秒"); $num = 0; if(file_exists($filename)){ if(!empty($_POST['enter']) && !empty($_POST['delete'])){ #投稿番号と削除番号を比較して、等しくなければ追記 $enter = $_POST['enter']; $delete = $_POST['delete']; $fp = fopen($filename,"a"); $lines = file($filename); $count = count(file($filename)); for($i=0; $i<=$count; $i++){ $line = explode('<>',$filename); $post_num = $line[0]; if($delete != $post_num){ $num = count(file($filename))+1; $total = $num."<>".$enter."<>".$date; fwrite($fp,$total."\r\n"); break; } } fclose($fp); } if(empty($_POST['enter']) && !empty($_POST['delete'])){ #削除 $delete = $_POST['delete']; $lines = file($filename); foreach($lines as $line){ $post = explode("<>",$line); $post_num = $post[0]; if($delete == $post_num){ unset($lines[$post_num]); file_put_contents('mission3-3.txt',$lines); }else{ } } } if(!empty($_POST['enter']) && empty($_POST['delete'])){ #強制追記 } }elseif(!file_exists($filename) && !empty($_POST['enter'])){ #新しく生成 $enter = $_POST['enter']; $num = 1; $fp = fopen($filename,"a"); $total = $num."<>".$enter."<>".$date; fwrite($fp,$total."\r\n"); fclose($fp); } ?>

1行目が0だから、だね。
同じ書籍を使っていると思われる質問は多いですよ。
https://teratail.com/search?q=mission3-3.txt
その中の結構な割合で指摘されていることですが、
テキストファイルにデータを保存して取り扱う形式は
覚えても現場で使えるスキルにはならないですし、
コードも冗長になって面倒なだけだと思います。
MySQLやPostgreSQLなどのRDBを使いましょう。
書籍もそれらを取り扱っているものを選びましょう。
