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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

解決済

php 条件分岐後に指定した番号の1文を消したい

退会済みユーザー

退会済みユーザー

総合スコア0

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

1回答

0評価

0クリップ

545閲覧

投稿2019/08/17 02:06

編集2019/08/17 04:28

投稿フォームからの送信か、削除フォームからの送信かを条件分岐で判断し、
投稿フォームからであればテキストファイルに追記書き込み、削除フォームからなら指定番号と一致する投稿番号を削除。
削除する方法は、fileにテキスト内容を1行ずつ配列に入れて、foreachで配列を確認し、指定番号と投稿番号が一致していれば飛ばす。そうでなければ書き込むということを行う。

を目標にしているのですが今のままでは、
・ページを開くとすでに「Notice: Undefined index: deletenumber in /public_html/mission_3-3_new.php on line 77」というエラーが出ている。

・削除フォームに削除したい投稿番号を入れて送信すると、ブラウザ上の対象文は削除されるが新たに投稿番号が追記書き込みされてブラウザ上に表示される。テキストファイル内の対象文は削除されないうえに新たに投稿番号が追記される。
という問題が出ています。

どのようにそれば改善できるのか教えていただきたいです!!
似たような質問はすべて目を通したうえで自分とコードが違い理解できなかったため質問させていただきました…!

11:15 加筆修正しました
13:26 修正したコードを載せました

<?php define("COMMENT_LIST_FILE","mission_3-3_new.txt"); if(!empty($_POST["user"]) || !empty($_POST["comment"]) || !empty($_POST["deletenumber"])){ $date = date("y/m/d H:i"); //カウント用ファイルを開く $fp2 = fopen("count.txt","r"); $num_text = fgets($fp2);//1行目を文字列として読み込む fclose($fp2);//ファイルを閉じる $num_text +=1;//カウントを1増やす $fp2 = fopen("count.txt","w"); fwrite($fp2,$num_text);//新しい数値を書き込む fclose($fp2); //投稿内容用ファイルを開く $fp = fopen(COMMENT_LIST_FILE, "a"); $info = $num_text."<>".$_POST["user"]."<>".$_POST["comment"]."<>".$date; fwrite($fp, $info."\r\n"); fclose($fp); if($_POST["deletenumber"] === $num_text){ $comment_list = file(COMMENT_LIST_FILE);//テキストの1行ごとに配列に入れる $fp = fopen(COMMENT_LIST_FILE, "w");//テキストファイルを空にする fclose($fp); $fp3 = fopen(COMMENT_LIST_FILE, "a"); foreach($comment_list as $comment_data){//区切って1文ずつチェックする $splits = explode("<>",$comment_data); if($sptits[0] !== $num_text){ fwrite($fp3, $info."\r\n"); }else{ continue; } fclose($fp3); } } } ?> <!DOCTYPE html> <html lang="ja"> <html> <head> <meta charset="utf-8"> <title>mission3-3_new</title> </head> <body> <form action="mission_3-3_new.php" method="post"> 【 投稿フォーム 】<br> 名  前: <input type="text" name="user" value=""><br> コメント: <input type="text" name="comment" value=""><br> <input type="submit"><br><br> 【 削除フォーム 】<br> 投稿番号: <input type="text" name="deletenumber" value=""><br> <input type="submit" value="削除"><br><br> </form> 【 投稿一覧 】<br> </body> </html> <?php $hairetsu = file(COMMENT_LIST_FILE); foreach($hairetsu as $hensuu){ $splits = explode("<>",$hensuu); if($splits[0] !== $delete_number){ //投稿番号、氏名、コメント、日時を表示して改行する echo $splits[0].".".$splits[1].".".$splits[2].".".$splits[3]."<br>"; } //繰り返し処理はここまで } ?>

###修正後のコード

<?php define("COMMENT_LIST_FILE","mission_3-3_new.txt"); if(!empty($_POST["user"]) || !empty($_POST["comment"])){ $date = date("y/m/d H:i"); //カウント用ファイルを開く $fp2 = fopen("count.txt","r"); $num_text = fgets($fp2);//1行目を文字列として読み込む fclose($fp2);//ファイルを閉じる $num_text +=1;//カウントを1増やす $fp2 = fopen("count.txt","w"); fwrite($fp2,$num_text);//新しい数値を書き込む fclose($fp2); //投稿内容用ファイルを開く $fp = fopen(COMMENT_LIST_FILE, "a"); $info = $num_text."<>".$_POST["user"]."<>".$_POST["comment"]."<>".$date; fwrite($fp, $info."\r\n"); fclose($fp); if(!empty($_POST["deletenumber"])){ $comment_list = file(COMMENT_LIST_FILE);//テキストの1行ごとに配列に入れる $fp = fopen(COMMENT_LIST_FILE, "w");//テキストファイルを空にする fclose($fp); $fp3 = fopen(COMMENT_LIST_FILE, "a"); foreach($comment_list as $comment_data){//区切って1文ずつチェックする $splits = explode("<>",$comment_data); if($sptits[0] !== $_POST["deletenumber"]){ fwrite($fp3, $info."\r\n"); }else{ continue; } fclose($fp3); } } } ?> <!DOCTYPE html> <html lang="ja"> <html> <head> <meta charset="utf-8"> <title>mission3-3_new</title> </head> <body> <form action="mission_3-3_new.php" method="post"> 【 投稿フォーム 】<br> 名  前: <input type="text" name="user" value=""><br> コメント: <input type="text" name="comment" value=""><br> <input type="submit"><br><br> 【 削除フォーム 】<br> 投稿番号: <input type="text" name="deletenumber" value=""><br> <input type="submit" value="削除"><br><br> </form> 【 投稿一覧 】<br> </body> </html> <?php $comment_list = file(COMMENT_LIST_FILE); foreach($comment_list as $comment_data){ $splits = explode("<>",$comment_data); if($splits[0] !== $_POST["deletenumber"]){ //投稿番号、氏名、コメント、日時を表示して改行する echo $splits[0].".".$splits[1].".".$splits[2].".".$splits[3]."<br>"; } //繰り返し処理はここまで } ?>

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/17 04:09

ベストアンサーを押したつもりが高評価ボタンだったんですね…!すみません!
m.ts10806

2019/08/17 04:14 編集

ただ、私の回答で本当に理解できて解決したのであれば、今回の質問は出なかったのでは、というのが私見です。(デバッグのことやPHPマニュアルのことまで言及しているので)
退会済みユーザー

退会済みユーザー

2019/08/17 04:30

デバックとphpマニュアルについては読んでいるところでまだ理解するに至っていないのですが、あの後なんとかデバイス上だけではありますが削除することが出来、残すはテキストファイル内の処理だけというところまできたので一応の解決ということにしようと思いました。 今回は新たに問題点が出たので質問したのですが、前回の回答で解決できるような問題だったんですね…理解しきれず申し訳ないです…!

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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