前提・実現したいこと
PHPで簡易掲示板を作成しているのですが、編集機能において編集し差し替えた後のテキストファイルの中身とブラウザの表示が、差し替えた文が2文表示されてしまいうまくいかない状態です。
上記の画像の状態で「a」を「b」と「comment」を「編集したよ」と変更し送信ボタンを押すと
1 a これはテストです
2 b 編集したよ
3 a test
4 b 編集したよ
と表示されてしまいます。
実現したい状態としてはこの4行目を表示させたくないです。
よろしければコードミスなどを教えていただきたいです。
該当のソースコード
php
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>mission_3-4</title> 6 <style> 7 form { 8 margin-bottom: 20px; 9 } 10 </style> 11 </head> 12 <body> 13 14 <?php 15 $filename = "mission_3-4.txt"; 16 17 //投稿機能 18 19 //フォーム内が空でない場合に以下を実行する 20 if (!empty($_POST['name']) && !empty($_POST['comment'])) { 21 22 //入力データの受け取りを変数に代入 23 $name = $_POST['name']; 24 $comment = $_POST['comment']; 25 26 //日付データを取得して変数に代入 27 $postedAt = date("Y年m月d日 H:i:s"); 28 29 //ファイルの存在がある場合は投稿番号+1、なかったら1を指定する 30 if (file_exists($filename)) { 31 $num = count(file($filename))+1; 32 } else { 33 $num = 1; 34 } 35 36 //書き込む文字列を組み合わせた変数 37 $newdata = $num . "<>" . $name . "<>" . $comment . "<>" . $postedAt; 38 39 //ファイルを追記保存モードでオープンする 40 $fp = fopen($filename,"a"); 41 42 //入力データのファイル書き込み 43 fwrite($fp,$newdata . "\n"); 44 fclose($fp); 45 } 46 47 //削除機能 48 49 //削除フォームの送信の有無で処理を分岐 50 if (!empty($_POST['dnum'])) { 51 52 //入力データの受け取りを変数に代入 53 $delete = $_POST['dnum']; 54 55 //読み込んだファイルの中身を配列に格納する 56 $delCon = file($filename); 57 58 //ファイルを書き込みモードでオープン+中身を空に 59 $fp = fopen($filename,"w"); 60 61 //配列の数だけループさせる 62 foreach ($delCon as $line) { 63 64 //explode関数でそれぞれの値を取得 65 $deldata = explode("<>",$line); 66 67 //削除番号と行番号が一致しなければ書き込み 68 if ($delete !== $deldata[0]) { 69 70 //入力データのファイル書き込み 71 fwrite($fp,$line); 72 } 73 } 74 fclose($fp); 75 } 76 77 //編集選択機能 78 79 //編集フォームの送信の有無で処理を分岐 80 if (!empty($_POST['edit'])) { 81 82 //入力データの受け取りを変数に代入 83 $edit = $_POST['edit']; 84 85 //読み込んだファイルの中身を配列に格納する 86 $editCon = file($filename); 87 88 //配列の数だけループさせる 89 foreach ($editCon as $line) { 90 91 //explode関数でそれぞれの値を取得 92 $editdata = explode("<>",$line); 93 94 //投稿番号と編集対象番号が一致したらその投稿の「名前」と「コメント」を取得 95 if ($edit == $editdata[0]) { 96 97 //投稿のそれぞれの値を取得し変数に代入 98 $editnumber = $editdata[0]; 99 $editname = $editdata[1]; 100 $editcomment = $editdata[2]; 101 102 //既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる 103 //formのvalue属性で対応 104 } 105 } 106 } 107 108 //編集実行機能 109 110 //編集か新規投稿か判断 111 if ((!empty($_POST['name'])) && (!empty($_POST['comment'])) && (!empty($_POST['editNO']))) { 112 113 //入力データの受け取りを変数に代入 114 $editNO = $_POST['editNO']; 115 116 //読み込んだファイルの中身を配列に格納する 117 $ret_array = file($filename); 118 119 //ファイルを書き込みモードでオープン+中身を空に 120 $fp = fopen($filename,"w"); 121 122 //配列の数だけループさせる 123 foreach ($ret_array as $line) { 124 125 //explode関数でそれぞれの値を取得 126 $data = explode("<>",$line); 127 128 //投稿番号と編集番号が一致したら 129 if ($data[0] == $editNO) { 130 131 //編集のフォームから送信された値と差し替えて上書き 132 fwrite($fp,$editNO . "<>" . $name . "<>" . $comment . "<>" . $postedAt . "\n"); 133 } else { 134 135 //一致しなかったところはそのまま書き込む 136 fwrite($fp,$line); 137 } 138 } 139 fclose($fp); 140 } 141 ?> 142 143 <form action="mission_3-4.php" method="post"> 144 <input type="text" name="name" placeholder="名前" value="<?php if(isset($editname)) {echo $editname;} ?>"><br> 145 <input type="text" name="comment" placeholder="コメント" value="<?php if(isset($editcomment)) {echo $editcomment;} ?>"><br> 146 <input type="text" name="editNO" value="<?php if(isset($editnumber)) {echo $editnumber;} ?>"> 147 <input type="submit" name="submit" value="送信"> 148 </form> 149 150 <form action="mission_3-4.php" method="post"> 151 <input type="text" name="dnum" placeholder="削除対象番号"> 152 <input type="submit" name="delete" value="削除"> 153 </form> 154 155 <form action="mission_3-4.php" method="post"> 156 <input type="text" name="edit" placeholder="編集対象番号"> 157 <input type="submit" value="編集"> 158 </form> 159 160 <?php 161 $filemei = "mission_3-4.txt"; 162 //表示機能 163 164 //ファイルの存在がある場合だけ行う 165 if (file_exists($filemei)) { 166 167 //読み込んだファイルの中身を配列に格納する 168 $array = file($filemei); 169 170 //取得したファイルデータを全て表示する(ループ処理) 171 foreach ($array as $word) { 172 173 //explode関数でそれぞれの値を取得 174 $getdata = explode("<>",$word); 175 176 //取得した値を表示する 177 echo $getdata[0] . " " . $getdata[1] . " " . $getdata[2] . " " . $getdata[3] . "<br>"; 178 } 179 } 180 ?> 181 </body> 182</html> 183
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/02 15:19