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

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

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

689閲覧

PHP簡易掲示板 削除機能の実装

claire

総合スコア4

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/07/06 01:30

簡易掲示板の削除機能に苦戦しています。

具体的には、削除指定番号以外のコメントもすべて消えてしまう状況です。

以下のコードを元に修正していただけると嬉しいです。

よろしくお願い致します。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>mission_3-3-c</title> </head> <body> <form action="" method="post"> <input type="text" name="name" placeholder="名前"> <input type="text" name="comment" placeholder="コメント"> <input type="submit" name="submit" value="送信"> </form> <form action="" method="post"> <input type="text" name="deleteNo" placeholder="削除対象番号"> <input type="submit" name="submit" value="削除"> </form> <?php ini_set('display_errors','On'); $filename="mission_3-3-c.txt"; $time=date("Y年m月d日 H時i分s秒"); if (!isset($_POST["comment"]) || $_POST["comment"] == "") exit; $comment=$_POST["comment"]; if ($_POST["name"] == "") { $name = "匿名"; } else { $name = $_POST["name"]; } $number=1; if(file_exists($filename)) { $fp = fopen ($filename, "r"); if($fp == null) exit(1); for ($number=1; fgets($fp); $number++ ); } //書き込み if (isset($name) || isset($comment)) { $fp = fopen($filename, "a"); $sep = "<>"; $array = [$number, $name, $comment, $time]; $str = implode($sep, $array); fwrite ($fp, $str. PHP_EOL); fclose ($fp); $lines = file ($filename, FILE_IGNORE_NEW_LINES); foreach($lines as $line) { echo $line. "<br>"; } //削除 } elseif (isset($_POST["deleteNo"])) { $deleteNo = $_POST["deleteNo"]; $lines = file ($filename, FILE_IGNORE_NEW_LINES); $fp = fopen ($filename,"w"); foreach ($lines as $line) { $string = explode($sep, $line); $str = json_encode($string); if ($str[0] != $deleteNo) { fwrite ($fp, $str. PHP_EOL); echo $str[0], "", $str[1], "", $str[2], "", $str[3]. "<br>"; } } fclose ($fp); } ?> </body> </html>

同じようなスレがたくさんあるのは承知の上で質問させていただきます。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mdj

2020/07/06 01:51

foreach ($lines as $line) { の$lineに値が入っているか、if ($str[0] != $deleteNo) {の判定直後がどうなっているか、あたりを確認したらよいのではないでしょうか。
guest

回答1

0

PHP

1 foreach ($lines as $line) { 2 // $stringは配列になる 3 $string = explode($sep, $line); 4 // $strは文字列になる(json形式の文字列) 5 $str = json_encode($string); 6 // $str[0]なので文字列の一文字目となる…$deleteNoと一致してないかチェックしてるけど比較するの間違ってるかと) 7 if ($str[0] != $deleteNo) { 8 fwrite ($fp, $str. PHP_EOL); 9 echo $str[0], "", $str[1], "", $str[2], "", $str[3]. "<br>"; 10 } 11 }

においてソースのコメントで記載しましたが
explode
json_encode
を参考にしてみてください

保存する際は

PHP

1 $array = [$number, $name, $comment, $time]; 2 $str = implode($sep, $array);

やってるので$string[0]$deleteNoとチェックしないといけないのでは?(&$str = json_encode($string);をする必要って無いような)

投稿2020/07/06 05:40

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問