前提・実現したいこと
削除機能について実装したいです。
一応、削除機能としては備わっているのですが、自分の幅を広げるために、ニュアンスを変更した形でも実装したいと考えています。
ここに質問の内容を詳しく書いてください。
簡易掲示板の作成中です。
今備わっている、削除機能は、削除番号を指定し、指定された番号に基づいて上書き(削除しました)と表示されるものになっています。
この、機能をファイルの内容を取り出して、ファイルを一度空にして、行ごとにファイルに書き込んでいく(ただし削除番号と一致する場合は書き込まない)ような機能に変更したいです。
php
1if ($_SERVER['REQUEST_METHOD'] == 'POST') { 2 $value = $_POST['mode']; 3 switch( $value ){ 4 case "insert": 5 $name = $_POST['name']; 6 $comment = $_POST['comment']; 7 $time = date('Y年m月d日 H時i分s秒'); 8 if (file_exists($filename)) { 9 $number = count(file($filename))+1; 10 } else { 11 $number = 1; 12 } // ファイルがあれば、番号は+1した値を代入、なかったら、番号は1 13 $datalist = $number."<>"."\t".$name."<>"."\t".$comment."<>"."\t".$time."\n"; 14 $fp = fopen($filename, 'a'); // 変数filenameを追記モードで開き、変数fpに代入 15 fwrite($fp, $datalist); // 変数fpに変数datalistに書き込まれたデータを代入 16 fclose($fp); // 変数をfpを閉じた。 17 break; 18 case "delete": 19 $delete = $_POST["delete"]; // 変数deleteを宣言して投稿されたdeleteを代入する 20 $delCon = file($filename); // delConを宣言する。変数のfilenameを配列化して代入 21 $fp = fopen($filename, "w"); //php内で変数fpを宣言してファイルを作成、書き込みモードで開く 22 for ($j = 0; $j < count($delCon); $j++) { // ループの初期化、変数delConの要素数より少ない分ループを行う。行った後はループを1足す。 23 $delData = explode("<>", $delCon[$j]); // 変数delDateを宣言して 24 if ($delData[0] != $delete) { 25 fwrite($fp, $delCon[$j]); 26 } else { 27 fwrite($fp, "消去しました。\n"); 28 } 29 } 30 fclose($fp); 31 break; 32 } 33 } 34?>
html
1<body> 2<form action="" method="post"> 3 名前: <input type="text" name="name"> 4 コメント: <input type="text" name="comment"> 5 <button type="submit" name="mode" value="insert">登録する</button> 6 7 削除対象番号:<input type="text" name="delete"> 8 <button type="submit" name="mode" value="delete">削除する</button> 9 </form> 10</body>
php
1 <?php 2 if (file_exists($filename)) { 3 $datalists = file($filename); 4 foreach ($datalists as $value) { 5 list($number, $name, $comment, $time) = explode("<>", $value); 6 echo h($number); 7 echo h($name); 8 echo h($comment); 9 echo h($time); 10 echo nl2br("\n"); 11 } 12 }else{ 13 echo "コメントが1件もありません"; 14 } 15 16 ?>
試したこと
削除番号の指定用フォームは作れていると思う
ファイル内容の取り出しはfile関数でできていると思う
一度ファイルを空にするのはfopen関数のwでできていると思う
行ごとにファイルに書き込んでいく(ただし削除番号と一致する場合は書き込まない)ような機能がよくわかっていないと思います。
https://teratail.com/questions/137315
一通り、この記事を読んだのですが、よくわかりませんでした。
追加で、
php
1 if ($delDate[0] != $delete) { 2 fwrite($fp, $delCon[$j]); 3 } else { 4 fwrite($fp, "消去しました。\n"); 5 } 6 }
の部分が自分でもよくわかっていないので教えていただきたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー