前提・実現したいこと
ここに質問の内容を詳しく書いてください。
phpで簡易掲示板の作成をする過程で、投稿を編集する機能を実装しようとしているのですが、取得した投稿番号に一致する名前とコメントをフォーム内に表示する方法がわからず詰まっています。ここで投稿番号に一致した名前とコメントを編集することし上書きすることで編集という機能にしたいと考えています。
流れとしては以下の通りです
【「入力フォーム」「削除フォーム」と並べて「編集番号指定用フォーム」を用意・「編集対象番号」の入力と「編集」ボタンが1つある】
【POST送信で「編集対象番号」を送信。受信する際は、if文で既存の各フォームとはまた別に「編集フォーム」で処理を分岐させる】
【ファイル読み込み関数で、ファイルの中身を1行1要素として配列変数に代入する。 ファイルを開き、先ほどの配列の要素数(=行数)だけループさせる】
【ループ処理内:区切り文字「<>」で分割して、投稿番号を取得】
【同・ループ処理内:投稿番号と編集対象番号を比較。イコールの場合はその投稿の「名前」と「コメント」を取得】
【既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる】
【既存の投稿フォーム内に「いま送信された場合は新規投稿か、編集か(新規登録モード/編集モード)」を判断する情報を追加する】
投稿フォームが「新規投稿」と「編集」を兼ねているため「新規投稿か、編集か」を判断できるようにする必要がある。
作成の過程としてフォーム内に新しい項目(テキストボックス※)を用意して、そこに編集したい投稿番号が表示される状態にしておこう
(※これは最終的に利用者から見えないようにします)。
【編集内容が問題ない場合:投稿番号と編集対象番号を比較して、等しい場合は、ファイルに書き込む内容を送信内容に差し替える】
このフォ―ムから送信があった場合、
・上記テキストボックス内が空かどうか確認する:
・空でないときは、テキストファイルの中身を取り出し、各行の投稿番号を比較。
・一致した時のみ、編集のフォームから送信された値と差し替える。
・空のときは、通常の新規投稿として扱われるようにする。
【上記でフォームに追加した情報が、ブラウザから見えてしまう場合は、type属性をhiddenに変更して見えなくする】
エラーメッセージ
該当のソースコード
<html lang="ja"> <head> <meta charset="UTF-8"> <title>mission3-5</title> </head> <body> <form action="" method="post"> <span>【 投稿フォーム 】</span><br> <span>名前: </span> <input type="text" name="name"><br> <span>コメント: </span> <input type="text" name="comment"><br> <span>パスワード: </span> <input type="text" name="password"><br> <input type="submit" value="送信"> <span>【 削除フォーム 】</span><br> <span>投稿番号: </span> <input type="number" name="delete"><br> <span>パスワード: </span> <input type="text" name="password"><br> <input type="submit" value="削除"> <span>【 編集フォーム 】</span><br> <span>投稿番号: </span> <input type="number" name="edit"><br> <span>パスワード: </span> <input type="text" name="password"><br> <input type="submit" value="編集"><br> <?php $name = $_POST["name"]; $delete = $_POST["delete"]; $comment = $_POST["comment"]; $edit = $_POST["edit"]; $dates = date('Y年m月d日 H時i分s秒'); $filename = "mission3-5.txt"; echo "----------------"."<br>"."<br>"; if(empty($name)){ echo "Error:name is empty"; } elseif(empty($comment)){ echo "Error:comment is empty"; } elseif(empty($password)){ echo "Error:password is empty"; } echo "<br>"."<br>"."----------------"."<br>"; echo "----------------------"."<br>"."[投稿一覧]"."<br>"; if(!empty($name) && !empty($comment)){ $p = fopen($filename,"a"); $total = (count(file($filename))+1)."<>".$name."<>".$comment."<>".$dates.PHP_EOL; fwrite($p,$total); fclose($p); $lines = file($filename); foreach($lines as $line){ $contents = explode("<>",$line); $postnumber = $contents[0]; $fullnamer = $contents[1]; $commenter = $contents[2]; $dater = $contents[3]; echo $postnumber; echo $fullnamer; echo $commenter; echo $dater."<br>";} } elseif(isset($delete)){ $delcon=file($filename); //file関数で開くテキストファイルの指定 $fp=fopen($filename,"w"); for($j=0; $j<count($delcon); $j++){ $deldata=explode("<>",$delcon[$j]); if($deldata[0] != $delete){ fwrite($fp,$delcon[$j]); }else{ fwrite($fp, ""); } } $lines = file($filename); foreach($lines as $line){ $contents = explode("<>",$line); $postnumber = $contents[0]; $fullnamer = $contents[1]; $commenter = $contents[2]; $dater = $contents[3]; echo $postnumber; echo $fullnamer; echo $commenter; echo $dater."<br>";} } if(isset($edit)) { // ここは編集番号よりデータを求める所 // データ件数分処理 $lines = file($filename); foreach($lines as $row) { // <>で分割して配列に $bbsRowData = explode("<>", $row); // 編集対象番号のときはデータをセットする if($bbsRowData[0] == $_POST["number"]) { $editNumber = $bbsRowData[0]; $editName = $bbsRowData[1]; $editComment = $bbsRowData[2]; // 即抜ける break;}}} ?> </form> </body>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー