前提・実現したいこと
編集フォームに番号を入れ、編集ボタンを押したら投稿フォームに番号が一致した投稿(名前・コメント)を表示させたい
発生している問題・エラーメッセージ
現在、編集フォームに番号を入れて編集ボタンを押してもエラーも何もでない状態で困っています。 投稿と削除は機能しています。
該当のソースコード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>mission_3-4</title> </head> <body> <form action ="" method ="post"> <h4>【投稿フォーム】</h4> <input type="hidden" name="edFlag" > <input type="text" name="yourname" placeholder ="名前" ><br> <textarea name = "text" rows="5" cols="40">コメント記入</textarea></textarea> <input type="submit" name="submit" value="送信"> </form><br> <?php $filename = "mission3-4.txt"; if(!file_exists($filename)){ touch($filename); //なかったらファイル作成 } $lines = file($filename, FILE_IGNORE_NEW_LINES); $lastRow = array_pop($lines); //初期値設定 $edFlag = ""; $name = "名前"; $comment = ""; //【新規/編集】ファイルに書き込み if(isset($_POST["submit"])){ $name = $_POST["yourname"]; //名前 $comment = $_POST["text"]; //コメント $date = date("Y/m/d H:i:s"); //日付 $edFlag = $_POST["edFlag"]; if($name=="" || $comment==""){ echo "※名前・コメントは必ず入力してください。<br>"; }else{ if($edFlag==""){ //新規 //最終行の番号を取得 $lastNum = explode("<>", $lastRow); //今回の書き込み番号(num)を設定 if($lastNum!=FALSE){ $num = (int) $lastNum[0]; $num = $num+1; }else{ $num = 1; } //ファイルに書き込み $fp = fopen($filename,"a"); fwrite($fp, $num."<>".$name."<>".$comment."<>".$date."<>".PHP_EOL); fclose($fp); echo "新規書き込み成功!<br><br>"; }else{ //編集 $linesData = array(); $lines = file($filename, FILE_IGNORE_NEW_LINES); //最新の配列データを取得 foreach($lines as $line){ //現在のm3-5.txtデータを配列に保存 array_push($linesData, $line); } //txtファイルをクリア $fp = fopen($filename, "w"); fwrite($fp,""); fclose($fp); //txtファイルに書き写し $fp = fopen($filename, "a"); foreach($linesData as $lineData){ $postData = explode("<>", $lineData); $lineNum = (int) $postData[0]; if($lineNum!=$edFlag){ fwrite($fp, $lineData.PHP_EOL); }else{ fwrite($fp, $lineNum."<>".$name."<>".$comment."<>"."$f1Pass"."<>".$date."<>".PHP_EOL); echo $edFlag."番の投稿が編集されました。<br><br>"; } } fclose($fp); } } } ?> <form action ="" method="post"> <h4>【編集フォーム】</h4> <input type="number" name="edNum" placeholder="編集番号"> <input type="submit" name="edit" value="編集"> </form><br> <?php $filename="mission3-4.txt"; $lines = file($filename, FILE_IGNORE_NEW_LINES); $lastRow = array_pop($lines); //初期値設定 $edFlag = ""; $name = "名前"; $comment = ""; if(isset($_POST["edit"])){ //編集フォームのsubmitがあれば、投稿を呼び出す $edNum = $_POST["edNum"]; if($edNum!="" ){ //空白チェック $lines = file($filename, FILE_IGNORE_NEW_LINES); //最新の配列データを取得 //指定の番号の投稿を、編集できるように投稿フォームに書き写し foreach($lines as $line){ //変数名、この後かぶるけど上書きされて問題ないよね? $postData = explode("<>", $line); $lineNum = (int) $postData[0]; if($lineNum==$edNum){ $edFlag = $lineNum; $newname = $postData[1]; $mewcomment = $postData[2]; } } }else{ echo "※編集番号は必ず入力してください。<br>"; } } ?> <form action ="" method="post"> <h4>【削除フォーム】</h4> <input type="number" name="delNum" placeholder="削除番号"> <input type="submit" name="delete" value="削除"> </form><br> <?php //【削除】ファイルから削除 if(isset($_POST["delete"])){ $delNum = $_POST["delNum"]; $linesData = array(); if($delNum!="" ){ //フォームに入力されているかチェック $lines = file($filename, FILE_IGNORE_NEW_LINES); //最新の配列データを取得 foreach($lines as $line){ //現在のm3-4.txtデータを配列に保存 array_push($linesData, $line); } //txtファイルをクリア $fp = fopen($filename, "w"); fwrite($fp,""); fclose($fp); //txtファイルに書き写し $fp = fopen($filename, "a"); foreach($linesData as $lineData){ $postData = explode("<>", $lineData); $lineNum = (int) $postData[0]; if($lineNum!=$delNum){ fwrite($fp, $lineData.PHP_EOL); }else{ echo "<br>『".$lineNum."番の投稿が削除されました。』<br>"; } } fclose($fp); }else{ echo "※削除番号は必ず入力してください<br>"; } } ?> <h4>【掲示板】</h4> <?php //新たに書き込んだものもあるため再定義 $lines = file($filename,FILE_IGNORE_NEW_LINES); echo "-----------------------------------------------------------------<br>"; echo "<br>【投稿一覧】<br>"; foreach($lines as $line){ $finalData = explode("<>", $line); //elements Data echo $finalData[0]." ".$finalData[1]." ".$finalData[2]." ".$finalData[4]." <br>"; } ?> </body> </html>
試したこと
補足情報(FW/ツールのバージョンなど)
どこをどう改善すればよいのか、ご教示頂けますと幸いです。
https://teratail.com/search?q=mission3-4.txt
どこかにヒントあるのでは。きっと参考書は同じ。