前提・実現したいこと
初心者です。簡易掲示板で番号を指定して投稿を削除したいです。
テキストファイルに投稿を 番号<>名前<>コメント<>日時<>改行コードで保存しています。
このテキストファイルを読み込んでexplode関数で<>で分割し番号を取得、この番号と等しい番号を投稿削除番号に入力した場合のみ削除を実行、その後テキストファイルと照らし合わせて等しくない場合には上書き保存をするコードをかこうとしています。
発生している問題・エラーメッセージ
・エラーメッセージは出ない
・空白の場合の処理&投稿番号よりも大きな数を入力した際のerr3がうまく表示されない
・削除の処理もうまくいっていない
原因:根本的に削除のコードが間違っていると思います。
該当のソースコード
php
1<html> 2<head> 3 4<?php 5 6mb_language("Japanese"); 7 mb_internal_encoding("UTF-8"); 8$err1=""; 9$err2=""; 10$err3=""; 11 12$OK_message="";//初回のアクセス時には送信ボタンが押されていないため何も表示がないことをここに書き込んでおく 13$filename="mission_3-1.txt"; 14if(isset($_POST['send']) === true){//送信ボタンが押された場合に以下のプログラムを働かせるためtrueを使う 15 16 17if($_POST['name'] === ""){ 18$err1= "名前を入力してください";//===は左右がまったく同じ値の場合の意、==でもいいがこちらは意図しない相互変換が行われてしまい1==1aaでもtrueになることもある 19}; 20 21if($_POST['message'] === ""){ 22$err2= "コメントを入力してください"; 23}; 24 25if( $err1 === "" && $err2 ==="" ){//&&はどちらもという意味andよりも厳格、どちらもエラーでなくメッセージが表示されないときにはこの下のプログラムが動くように設定 26$name=$_POST['name']; 27$message=($_POST['message']); 28$time=date("Y/m/d G:i:s");//時間取得 29 30$filename="mission_3-1.txt"; 31if (file_exists($filename)) { 32 $count = count(file($filename))+1;//file関数を使い行ごとに配列を格納し、その行の数をカウント 33} else { 34 $count = 1;//もし何も書き込まれていない場合は1を返す 35}; 36$newdata = (count(file($filename))+1)."<>".$name."<>".$message."<>".$time."<>"."PHP_EOL";//php_eolの文字はfile型式に合わせた改行文字を打ってくれる 37//カウントした数に+1した値が次の投稿番号になる 38 39$fp=fopen($filename,"a"); 40fwrite($fp,$newdata); 41fclose($fp); 42 43$OK_message=$newdata."を受け付けました";// .をnewdataの後に置くことで並列表示ができる 44 45};}; 46 47 48$delete=""; 49if(isset($_POST['send_delete']) === true){ 50$delete=$_POST['send_delete']; 51 52if($_POST['send_delete'] ===""){ 53 54 $err3="削除番号を入力してください"; 55}; 56 57if (file_exists($filename)) { 58 $count1 = count(file($filename)); 59}; 60 61if($_POST['send_delete']>$count1){ 62 63 64 65 $err3="投稿番号が見つかりません"; 66}; 67if($err3===""){ 68 69$filename="mission_3-1.txt"; 70$filedata = file($filename); 71$a=fopen($filename,"w"); 72@fwrite($a,""); 73fclose($a); 74 75for ($j = 0; $j < count($filedata); $j++) { 76$delDate = explode("'<>'", $filedata[$j]); 77array_splice($delDate,1); 78if ($delDate[0] != $delete) { 79 80$b = fopen($filename, "a"); 81 82@fwrite($b, $filedata[$j]); 83fclose($b); 84} elseif ($delDate[0] == $delete) { 85 86$c = fopen($filename, "a"); 87 88@fwrite($c, "消去しました。PHP_EOL"); 89fclose($c); 90echo "削除しました"; 91 }; 92 }; 93 94 95 96}; 97}; 98 99 100 101 102?><h1>掲示板</h1> 103<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 104</head> 105<body> 106<form action="mission_3-3.php" method="post"> 107<h3>投稿</h3> 108 <p><input type="text" name="name" value="名前" size="10"></p> 109 <p><input type="text" name="message" value="コメント" size="20"></p> 110 <p><input type="submit"name="send" value="送信する"></p> 111<h3>投稿削除</h3> 112 <p><input type="text" name="delete" value="削除番号" size="10"></p><!--削除番号の入力フォーム--> 113 <p><input type="submit"name="send_delete" value="送信する"></p> 114<?php 115echo $err1.'<br>'; 116echo $err2.'<br>'; 117echo $err3.'<br>'; 118 119echo $OK_message.'<br>'; 120?> 121</form> 122<h2>表示欄</h2> 123 124<?php 125$file_name = "mission_3-1.txt"; 126$data = file_get_contents($file_name); 127$data=explode("<>",$data);//<>でデータを分割して配列に格納 128$cnt = count($data);//分割したデータをカウント 129for ($i=0; $i<$cnt; $i++)//カウント数以下なら1を足した数値の数を表示 130{ 131 echo ($data[$i])."<br>"; 132 133} 134?> 135</body> 136</html> 137
試したこと
explodeで分割するところまではできたのですがその先がどう書いていいのかわからないです。他にも同じ質問してる人いるからそっちを参考にするようにと教えていただいたので現在はそちらを参考にしつつ修正中です。