phpの簡易投稿版を作成しているのですが、編集機能を作成している途中で、$idに番号が入っている際に上書きをするようにプログラムしていたのですがうまく動きませんでした。そのため、どこで止まっっているのか調べるため、最後の行の
elseif(!empty($id)){
echo "hello";
を出力したのですが、表示されず、このelseifをifに変更すると表示されました。どこでうまくいっていないのかわからないため、助言いただきたいです。
手順は以下の通りです。
【「入力フォーム」「削除フォーム」と並べて「編集番号指定用フォーム」を用意・「編集対象番号」の入力と「編集」ボタンが1つある】
【POST送信で「編集対象番号」を送信。受信する際は、if文で既存の各フォームとはまた別に「編集フォーム」で処理を分岐させる】
【ファイル読み込み関数で、ファイルの中身を1行1要素として配列変数に代入する。 ファイルを開き、先ほどの配列の要素数(=行数)だけループさせる】
【ループ処理内:区切り文字「<>」で分割して、投稿番号を取得】
【同・ループ処理内:投稿番号と編集対象番号を比較。イコールの場合はその投稿の「名前」と「コメント」を取得】
【既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる】
【既存の投稿フォーム内に「いま送信された場合は新規投稿か、編集か(新規登録モード/編集モード)」を判断する情報を追加する】
投稿フォームが「新規投稿」と「編集」を兼ねているため「新規投稿か、編集か」を判断できるようにする必要がある。
作成の過程としてフォーム内に新しい項目(テキストボックス※)を用意して、そこに編集したい投稿番号が表示される状態にしておこう
(※これは最終的に利用者から見えないようにします)。
【編集内容が問題ない場合:投稿番号と編集対象番号を比較して、等しい場合は、ファイルに書き込む内容を送信内容に差し替える】
このフォ―ムから送信があった場合、
・上記テキストボックス内が空かどうか確認する:
・空でないときは、テキストファイルの中身を取り出し、各行の投稿番号を比較。
・一致した時のみ、編集のフォームから送信された値と差し替える。
・空のときは、通常の新規投稿として扱われるようにする。
【上記でフォームに追加した情報が、ブラウザから見えてしまう場合は、type属性をhiddenに変更して見えなくする】
<html lang="ja"> <head> <meta charset="UTF-8"> <title>mission3-5</title> </head> <body> <?php $edit = $_POST["edit"]; $id = $_POST["id"]; if(isset($edit)) { // ここは編集番号よりデータを求める所 // データ件数分処理 $filename = "mission3-5.txt"; $lines = file($filename); foreach($lines as $row) { // <>で分割して配列に $bbsRowData = explode("<>", $row); // 編集対象番号のときはデータをセットする if($bbsRowData[0] == $_POST["edit"]) { $editNumber = $bbsRowData[0]; $editName = $bbsRowData[1]; $editComment = $bbsRowData[2]; // 即抜ける break;}}} ?> <form action="" method="post"> <span>【 投稿フォーム 】</span><br> <span>名前: </span> <input type="text" name="name" value="<?php echo $editName; ?>"><br> <span>コメント: </span> <input type="text" name="comment" value="<?php echo $editComment; ?>"><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 name="id" value="<?php echo $edit; ?>"> <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"; $id = $_POST["id"]; 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) &&empty($id)){ $p = fopen($filename,"a"); $total = (max(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>";} } elseif(!empty($id)){ echo "hello"; } ?> </form> </body>
あなたの回答
tips
プレビュー