前提・実現したいこと
phpを学び始めたばかりの初心者です。
前回質問した削除の実装はうまくいったのですが、削除した後に投稿すると番号がおかしくなってしまいます。
本来は2を削除して4を投稿した際に
1 (名前) (コメント) (投稿日) (投稿時間)
3 (名前) (コメント) (投稿日) (投稿時間)
4 (名前) (コメント) (投稿日) (投稿時間)
としたいのですが、
1 (名前) (コメント) (投稿日) (投稿時間)
3 (名前) (コメント) (投稿日) (投稿時間)
3 (名前) (コメント) (投稿日) (投稿時間)
となってしまいます。
ちなみにそのあとに3を削除すると、二つとも消えます。
投稿機能の方のカウントに問題があるのでは?と思い、$num++を入れてみたりしたのですがダメでした…
また、ほかの方の質問を探して取り入れてみたのですが、それでも解決できなかったため、質問させて頂きました。
どうか皆様のお力をお貸し頂きたいです。よろしくお願い致します。
該当のソースコード
<html> <body> <?php function h($str){ return htmlspecialchars($str,ENT_QUOTES,'UTF-8');} //投稿機能 if(!empty($_POST['name'])&&!empty($_POST['comment'])){ $textfile="mission_3.txt"; $fp=fopen($textfile,"a+"); $comment=$_POST['comment']; $name=$_POST['name']; $date=date("Y/m/d H:i:s"); $num=count(file($textfile))+1; $newDate=$num.'<>'.$_POST['name'].'<>'.$_POST['comment'].'<>'.$date."\n"; fwrite($fp,$newDate); fclose($fp);} //削除機能 if (!empty($_POST['send_delete'])) { $textfile="mission_3.txt"; $ret_array=file($textfile); $delete = $_POST['delete']; //指定した番号以外を書き込み $fp2=fopen($textfile,"w"); for ($j=0; $j<count($ret_array); $j++){ $delDate=explode("<>",$ret_array[$j]); if ($delDate[0]!==$delete){ fwrite($fp2,$ret_array[$j]);}} fclose($fp2);} ?> </br> <form action="" method="post"> [投稿フォーム]<br> <input type="text" name="name" placeholder="名前"><br> <input type="text" name="comment" placeholder="コメント"> <input type="submit" value="送信"><br><br> [削除フォーム]<br> <input type="text" name="delete" placeholder="削除対象番号"> <input type="submit" name="send_delete" value="削除"> </form> <?php //表示 $textfile='mission_3.txt'; if(file_exists($textfile)){ $array=file($textfile,FILE_SKIP_EMPTY_LINES); foreach($array as $word){ $words=explode('<>',$word); echo $words[0].' '.$words[1].' '.$words[2].' '.$words[3]."<br>";}} ?> </body> </html>
試したこと
同じような形で質問されているもの( https://teratail.com/questions/207044 )や、簡易掲示板の他の投稿(削除機能や編集機能の実装について質問している投稿)と見比べたり、外部のサイトで同じようなものを作成しているものを参考にしました。
$lines = file('keijiban.txt');
$lastLine = $lines[count($lines) - 1];
$num = explode('<>', $lastLine)[0];
のようなものも試しました。
回答2件
あなたの回答
tips
プレビュー