前提・実現したいこと
phpで簡易掲示板に「削除機能」を付加し、指定された番号の投稿だけ削除できるようにしたいです。
削除番号指定用フォームを追加→ファイル読み込み関数でファイルの中身を1行1要素として配列変数に代入→ファイルを開き、先ほどの配列の要素数(=行数)だけループさせるところまでは調べて書き込むことができたのですが、"ループ処理内で投稿番号と削除対象番号を比較し、等しくない場合は、ファイルに追加書き込みを行う"の部分がわからず、実装出来ません。
初歩的な質問ではあると思いますがご教授お願いします。
該当のソースコード
PHP
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>簡易掲示板</title> 6</head> 7<body> 8 <form action="" method="post"> 9 <!--名前の入力フォーム--> 10 <input type="text" name="name" value="名前"> 11 <!--コメントの入力フォーム--> 12 <input type="text" name="comment" value="コメント"> 13 <input type="submit" name="submit"> 14 <!--消去の入力フォーム--> 15 <input type="text" name="deleteno" value=""> 16 <input type="submit" name="delete" value="削除"> 17 </form> 18 <?php 19 /*ファイルの指定*/ 20 $filename = "mission_3-1.txt"; 21 /*POST送信があったとき*/ 22 if(isset($_POST["delete"])){ 23 /*変数に代入*/ 24 $delete = $_POST["deleteno"]; 25 /*ファイル全体を読み込んで配列に格納する*/ 26 $delCon = file("mission_3-1.txt"); 27 /*配列の要素数(=行数)だけループさせる*/ 28 for ($j = 0; $j < count($delCon) ; $j++){ 29 /*区切り文字「<>」で分割して、投稿番号を取得*/ 30 $delData = explode("<>", $delCon[$j]); 31 /*投稿番号と削除対象番号を比較。等しくない場合はファイルに追加書き込みを行う*/ 32 if ($delData[0] == $delete) { 33 array_splice($delcon, $j, 1); 34 file_put_contents($filename, implode("\n", $delCon)); 35 } 36 37 } 38 fclose($fp); 39 } 40 /*POST送信があった時*/ 41 if (isset($_POST["submit"])){ 42 /*変数に代入*/ 43 $name = $_POST["name"]; 44 $comment = $_POST["comment"]; 45 /*日付データ取得*/ 46 $date = date("Y/m/d H:i:s"); 47 /*ファイルの存在がある場合は投稿番号+1、なかったら1を指定*/ 48 if (file_exists($filename)) { 49 $num = count(file($filename))+1; 50 } else { 51 $num = 1; 52 } 53 /*書き込む文字列を組み合わせた変数*/ 54 $data = "$num <> $name <> $comment <> $date". PHP_EOL; 55 $fp2 = fopen($filename , "a"); 56 fwrite( $fp2 , $data); 57 fclose($fp2); 58 } 59 ?> 60 61 【 投稿一覧 】<br> 62 63 <?php 64 /*ファイル全体を読み込んで配列に格納する*/ 65 $ret_array = file( $filename ); 66 if(file_exists($filename)){ 67 foreach( $ret_array as $value ) { 68 $result = explode("<>", $value); 69 echo "$result[0] $result[1] $result[2] $result[3] <br>" ; 70 } 71 } 72 73 ?> 74</body> 75</html>
回答1件
あなたの回答
tips
プレビュー