今phpで簡易掲示板の作成をしています。
削除機能を付けたいのですが、
現状として
①「削除」の送信ボタンを二回押さないと更新されない
②入力フォームの下に表示されるのが、最新のフォームのみ
(本当はテキストファイルに書き込まれている内容全部を表示したい)
となっています。
改善のアドバイスお願いします!
<html> <html lang = "ja"> <head> <meta charset = "utf-8"> </head> <body> <form method= "post" action="mission_2-3.php"> <input type="text" name="name"><br> <input type="text" name="comment"> <input type="submit"><br> <!--削除用の入力フォームを設置--> <input type="text" name="delete" value="削除対象番号"> <input type="submit" value="削除"><br> </form> <?php $filename="mission_2-1_shima.txt"; //入力フォームのデータを受け取る $name= ($_POST['name']); $comment = ($_POST['comment']); $delete= ($_POST['delete']); //日付データの取得 $date=date('Y年m月d日 H:i:s'); //投稿番号の取得 //テキストファイルにデータがない場合は1を指定 //テキストファイルにある場合は+1 if (file_exists($filename)){ $num=count(file($filename))+1; } else{ $num=1; } //まとめた変数 $newdate= $num."<>".$name."<>".$comment."<>".$date; //もしフォームが空じゃなかったら書き込みをする if (!empty($name) && !empty($comment)){ $fp = fopen($filename,'a'); fwrite($fp, $newdate."\n"); fclose($fp); } //削除番号に数字が入力された場合 $files=file('mission_2-1_shima.txt'); if(!empty($delete)){//条件分岐① //ファイルの中身を空にする $fp=fopen($filename,'w'); // ファイルを0に丸める ftruncate($fp,0); // ファイルポインタを先頭に戻す fseek($fp,0); foreach ($files as $file){//ループ処理① $words=explode("<>",$file); if($words[0] != $delete){//条件分岐② fwrite($fp,$file); }}//条件分岐②とループ処理②おわり fclose($fp); }//条件分岐①おわり echo "{$words[0]}{$words[1]}{$words[2]}{$words[3]}{$words[4]}"; echo "<br>"; ?> </body> </html>
面倒だからコード見てないけど 削除する前にセレクトしてはだめ
↑気づいていてあえて突っ込まず回答してみました。
(案2はそこを解消できるはずのコードですけど)
削除する前にセレクトってどういうことですか?
ひとまずインデントをきちんとつけてみてください。
おかしいところがある程度見えてくるはずです。
//削除番号に数字が入力された場合、のところで削除前のデータを全部取得して、//ループ処理①で削除を判定する前に全件必ず$wordに保存していることを、削除する前にセレクトと仰っているものと思います。端的に$wordへの代入をfwriteと同じ位置でやればよいのでは?
作りがそもそも微妙なので「私ならこう作る」という感じで簡易雛形コードを回答に追記しました。
処理部分は書いていませんのでご自身で埋めるようにしてください。
回答2件
あなたの回答
tips
プレビュー