php初心者です。
phpで簡易掲示板を作成しています。
削除機能を実装したいのですがうまく書くことができません。
具体的にはformから送信された番号と等しい投稿番号のコメントが削除されるようにしたいです。どのように修正したら良いのかご回答よろしくお願い致します。
ソースは下記になります。
php
1<html> 2<body> 3<form action = "mission_2-4.php" method = "post"> 4 名前 : <br /> 5 <input type = "text" name = "name" size = 30 value = "" /><br /> 6 コメント : <br /> 7 <textarea name = "comment" cols = "30" rows = "5"></textarea><br /> 8 <br /> 9 <input type = "submit" value = "送信する" /><br /> 10 <br /> 11 削除番号 : 12 <input type = "text" neme = "delete" /> 13 <input type = "submit" value = "削除" /> 14</form> 15</body> 16</html> 17 18<?php 19if (((isset($_POST["name"])) && ($_POST["name"] != "")) or ((isset($_POST["comment"])) && ($_POST["comment"] != ""))) 20{ 21 if (isset($_POST["name"])) 22 { 23 $name = $_POST["name"]; 24 if( get_magic_quotes_gpc() ) { $name = stripslashes("$name"); } 25 $name = htmlspecialchars ($name); 26 $name = mb_substr ($name, 0, 30, 'UTF-8'); 27 } 28 if (isset($_POST["comment"])) 29 { 30 $comment = $_POST["comment"]; 31 if( get_magic_quotes_gpc() ) { $comment = stripslashes("$comment"); } 32 $comment = mb_substr ($comment, 0, 200, 'UTF-8'); 33 } 34 35 $fp = fopen("write.txt", "r"); 36 $number = fgets($fp); 37 $i = $number+1; 38 fclose ($fp); 39 $time = date("Y/n/j G:i"); 40 $write = $i . "<>" . $name . "<>" . $comment . "<>" . $time .PHP_EOL ; 41 $fp = fopen ("./log.txt","a+"); 42 flock ($fp, LOCK_EX); 43 fputs ($fp,$write); 44 flock ($fp, LOCK_UN); 45 fclose ($fp); 46} 47 48?> 49<?php 50if (((isset($_POST["name"])) && ($_POST["name"] != "")) or ((isset($_POST["comment"])) && ($_POST["comment"] != ""))) 51{ 52 53 $fp = fopen('write.txt', 'r'); 54 $number = fgets($fp); 55 $i = $number+1; 56 fclose($fp); 57 $fp = fopen('write.txt', 'w'); 58 fputs($fp, $i); 59 fclose($fp); 60 print "書き込み完了しました<br>"; 61} 62?> 63 64<?php 65$fp = fopen('log.txt', 'r'); 66while (!feof($fp)) 67{ 68 $line = fgets($fp); 69 print $line; 70 print "<br>\n"; 71} 72fclose($fp); 73?>
削除機能
php
1<?php 2if((isset($_POST["delete"])) && ($_POST["delete"] !="")) 3{ 4 if (isset($_POST["delete"])) 5 { 6 $delete = $_POST["delete"]; 7 if( get_magic_quotes_gpc() ) { $delete = stripslashes("$delete");} 8 $delete = htmlspecialchars ($delete); 9 } 10 11 $fp = fopen('log.txt', 'r'); 12 while (!feof($fp)) 13 { 14 $line = fgets($fp); 15 $del = explode("<>",$line); 16 } 17 fclose($fp); 18 19 if($del[0] != $delete) 20 { 21 $fp = fopen('log.txt', 'w'); 22 fwrite($fp,$line); 23 fclose($fp); 24 } 25 print "削除しました<br>"; 26 27} 28?> 29 30
追加・修正について
現在phpで簡易掲示板を作成しており、名前・コメントのいずれかの入力フォームから値が送信されると、ブラウザ上に"投稿番号<>名前<>コメント<>投稿時間"が表示されるようにしました。ここまでは実装することができました。
そこで次はこれらの投稿を削除する機能を実装したいです。具体的には、まず削除番号の項目のフォームから値が送信されるとPOSTで受け取り、その後、投稿内容が保存されている"log.txt"を読み込み、explode関数を用いて投稿番号を取得、行末までループさせます。その後取得した投稿番号と送信された値を比較して等しくない場合のみ投稿を"log.txt"に上書きすることによって、値と等しい投稿番号の書き込みを削除したいです。その削除機能を実装しようとしたのが上記です。
上記のコードではエラーは出ないのですが、送信しても何も起きず、printを用いて表示されるはずの"削除しました"も表示されません。ただ値を送信しただけになってしまいます。うまく値を受け取れていないような気がするのですが理由が分からない状態です。そのため、投稿番号を取得する部分や比較する部分のコードが正しいのかどうかも確認することができていないです。
インデックスはつけて修正しました。他にも読みづらい点があるとは思いますがどうかよろしくお願い致します。何か他にもありましたらご指摘よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー