phpで作成した簡易掲示板で指定した番号のコメントを削除する方法

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,942

sumikko6210

score 130

php初心者です 
今,phpで簡易掲示板を作成しています

番号を指定すると、指定された番号のコメントが削除される仕組みを作っています。
コードを書いたのですが、反応せず、コメントが消えません。
番号指定して、削除ボタンを押すと該当番号のコメントが消えるコードを教えていただきたいです

コード↓ 
<?php

$dataFile ='bbs2.txt';

if(isset($_POST['toukou']))
{

    $message = ($_POST['message']);

    $user = ($_POST['user']);

    $postedAt = date('Y-m-d H:i:s');

    $newData = (sizeof(file($dataFile)) + 1)."<>".$message."<>".$user."<>".$postedAt. "\n";

    $fp = fopen($dataFile,'a');
    fwrite($fp, $newData);
    fclose($fp);
}

if (isset($_POST['delete'])) {

$delete = $_POST['delete'];    

$delCon = file("bbs2.txt");
for ($j = 0; $j < count($delCon) ; $j++){
$delData = explode("<>", $delCon[$j]);
if ($delData[0] == "{".$delete."}") {
array_splice($delCon, $j, 1);

}
}

}

?>

<!DOCTYPE html>
<html lang="ja">
<head>
     <meta charset="utf-8">
     <title>簡易掲示板</title>
</head>
<body>
<h1>簡易掲示板</h1>
     <form action="" method="POST">

       message:<input type="text" name="message">
       user:<input type="text" name="user">
         <input type="submit" name="toukou" value="投稿"></br></br>

     </form>

     <form action="" method="POST">
     削除対象番号<input type="text" name="delete">
         <input type="submit" name="delete" value="削除">
     </form>

<?php

     $file=file($dataFile); // ファイルの内容を配列に格納

     foreach( $file as $value ){

     $line = explode("<>",$value);

     echo $value."<br />\n"; // 改行しながら値を表示

}

?>

</body>
</html>

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

修正すべき箇所が、2か所あります。

まず一点目は、HTMLの次の箇所です。

<form action="" method="POST"> 
     削除対象番号<input type="text" name="delete"> 
         <input type="submit" name="delete" value="削除"> 
     </form>


ここで、name="delete" が、ボタンにもinputタグにも設定されています。
POSTが正しくされないため、inputタグのほうのname属性を、name="deleteNo" と変更しましょう。

そのため、コードは以下のように、$deleteに代入している部分を$_POST['deleteNo']に変更します。
file_put_contents も入っていることに注意してください。

if (isset($_POST['delete'])) {

$delete = $_POST['deleteNo'];
$delCon = file("bbs2.txt");
for ($j = 0; $j < count($delCon) ; $j++){ 
$delData = explode("<>", $delCon[$j]);

if ($delData[0] == "{".$delete."}") { 
array_splice($delCon, $j, 1);
file_put_contents($dataFile, implode("\n", $delCon));
}

次に、もう一点。
はたして、

if ($delData[0] == "{".$delete."}")


はきちんと評価されているでしょうか?
ファイルに書き込むとき、

$newData = (sizeof(file($dataFile)) + 1)."<>".$message."<>".$user."<>".$postedAt. "\n";


となっているので、ファイルの行の先頭はただの1、2・・・という数値が入ると思います。
{1}、{2}が入るのならば、ifの評価式で良いのですが。。
そのため、以下のように"{"と"}" の文字をとってしまいましょう

if ($delData[0] == $delete) {

これでどうでしょうか??

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/13 18:47

    丁寧なご返答、誠にありがとうございました!
    無事、実装することができました
    教えていただいた点と自分がまだ十分に理解できてなかった点をよく復習します
    この度はほんとうにありがとうございました!

    ちなみにこの掲示板はメール機能なども実装していく予定です。
    以前、コメントをしてくださった「排他」などの質問をまたするかもしれませんので
    そのときはまたよろしくお願いいたします

    キャンセル

0

array_splice($delCon, $j, 1); したデータを、bbs2.txtにかきこんでいないからでは・・・?

具体的には、if (isset($_POST['delete'])) の制御ブロックの最後あたりに、

file_put_contents($dataFile, implode("\n", $delCon));
をつければ良い・・・かな??

ただ、きちんとした掲示板にするには、排他などいろいろかんがえないといけませんね。。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/13 17:14

    ご返信ありがとうございます

    上記のコードにfile_put_contents($dataFile, implode("\n", $delCon));を記載
    したもののなにも反映されず、変化がありませんでした・・・
    もう少しお力添えをしていただけるとありがたいです

    うまくできればまた報告いたします


    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる