質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

87.77%

掲示板の投稿削除機能について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 909

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
プログラミング初心者です。PHP掲示板の投稿の削除機能を搭載したいです。
フォームを作り、「削除対象番号」を入力し、「削除」ボタンを押すと、投稿すべてが消えてしまいます。原因が何か分からないです。

発生している問題・エラーメッセージ

エラーメッセージ


Warning: end() expects parameter 1 to be array, null given in /public_html/mission_3-3.php on line 73

Notice: Undefined variable: fp in /public_html/mission_3-3.php on line 80

Warning: fclose() expects parameter 1 to be resource, null given in /public_html/mission_3-3.php on line 80

該当のソースコード

ソースコード


<html>
<head>
<title>3-3</title>
<meta charset="utf-8">
</head>    
<body>
<form action="mission_3-3.php" method="post">

名前<br>
<input type="text" name="name" value=""><br>

<br>コメント<br>
<textarea name="comment" cols="30" rows="8"></textarea><br>
<input type="submit" name="submit" value="送信"><br>

<br><br>削除対象番号:<br>
<input type = "text" value = "" name = "delete"><br>
<br><input type = "submit" value = "削除"><br>

</form>

<?php
$filename="mission_3-3.txt";
//■投稿機能
if(!empty($_POST["name"])and !empty($_POST["comment"]))
{
if(!isset($_POST["name"]))
{
echo "名前を入力してください!";
};
if(!isset($_POST["comment"]))
{
echo "コメントを入力してください!";
};

//■ファイルがあるかどうかの確認
$toukou_number=1;
$name=$_POST["name"];
$date=date("Y年m月d日 H:m:s");
$comment=$_POST["comment"];

if(file_exists($filename))
{
$text_file = file($filename);//ファイルがあったら、ファイルを配列化する
$last_toukou=end($text_file);//最後の投稿の要素を取り出す
$divide_end_number=explode("<>",$last_toukou);//最後の投稿の要素を、さらに<>で分割する
$toukou_number=(int)$divide_end_number[0]+1;//投稿番号の部分を取り出し、投稿番号が「最後の投稿の番号+1」の数になるように設定

}
else
{
$toukou_number=1;//ファイルがなかったら「投稿番号=1」    
};

$toukou=$toukou_number."<>".$name."<>".$comment."<>".$date;

$fp=fopen($filename,"a");
fwrite($fp,$toukou."\n");
fclose($fp);

};

//■削除機能
if(!empty($_POST["delete"]))
{
$fp_w=fopen($filename,"w");
fclose($fp_w);
$fp_a=fopen($filename,"a");
for($value_2=0;$value_2<end($text_file); $value_2++)
{
$divide_toukou=expode("<>",$value_2);
if($divide_toukou[0]!==$_POST["delete"])
{
fwrite($fp_a,$toukou.\n);
};
};fclose($fp);
};

$filename="mission_3-3.txt";
$lines=file($filename);
foreach($lines as $line)
{
echo $line[0]."".$line[1]."".$line[2]."".$line[3]."<br>";
};

?>
</body>
</html>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2019/10/16 14:43

    コードは ``` と ``` で囲ってください。インデントされてないコードはあなたも読む気がしないのでは? 配当者・閲覧者はなおさら。

    キャンセル

  • m.ts10806

    2019/10/16 14:45

    マークダウンなどの機能はなるべくきちんと利用してください。ヘルプページや質問投稿画面にも説明があります。
    特にコードは回答者が再現確認をした上で回答することも多いです。マークダウンではなく平で提示されるとインデントがなくなったり質問者のコードそのものではなくなります。

    あと…
    この手の掲示板関係の質問は過去に数多投稿されていますので、まずは過去質問を参照してください。
    エラーメッセージは原因と対策を教えてくれています。しっかり読んでデバッグを行い、PHPマニュアルを確認すれば大抵の初期問題は解決できます。

    キャンセル

回答 1

checkベストアンサー

0

「削除」ボタンを押すと、投稿すべてが消えてしまいます

ファイルを空にするコードを書いている(以下の★の2行)からです。

//■削除機能
if(!empty($_POST["delete"]))
{
$fp_w=fopen($filename,"w"); // ★ なぜファイルを空にしているの?
fclose($fp_w);              // ★

(php.net)fopen - パラメータ

mode 説明
'w' 書き出しのみでオープンします。ファイルポインタをファイルの先頭に置き、 ファイルサイズをゼロにします。ファイルが存在しない場合には、 作成を試みます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

同じタグがついた質問を見る