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

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

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

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

Q&A

1回答

945閲覧

編集ボタンを押したら投稿フォームに一致した名前とコメントを表示させたい

tnk1234

総合スコア0

PHP

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

0グッド

0クリップ

投稿2021/07/19 13:17

編集2021/07/19 13:22

前提・実現したいこと

編集フォームに番号を入れ、編集ボタンを押したら投稿フォームに番号が一致した投稿(名前・コメント)を表示させたい

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

現在、編集フォームに番号を入れて編集ボタンを押してもエラーも何もでない状態で困っています。 投稿と削除は機能しています。

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>mission_3-4</title> </head> <body> <form action ="" method ="post"> <h4>【投稿フォーム】</h4> <input type="hidden" name="edFlag" > <input type="text" name="yourname" placeholder ="名前" ><br> <textarea name = "text" rows="5" cols="40">コメント記入</textarea></textarea> <input type="submit" name="submit" value="送信"> </form><br> <?php $filename = "mission3-4.txt"; if(!file_exists($filename)){ touch($filename); //なかったらファイル作成 } $lines = file($filename, FILE_IGNORE_NEW_LINES); $lastRow = array_pop($lines); //初期値設定 $edFlag = ""; $name = "名前"; $comment = ""; //【新規/編集】ファイルに書き込み if(isset($_POST["submit"])){ $name = $_POST["yourname"]; //名前 $comment = $_POST["text"]; //コメント $date = date("Y/m/d H:i:s"); //日付 $edFlag = $_POST["edFlag"]; if($name=="" || $comment==""){ echo "※名前・コメントは必ず入力してください。<br>"; }else{ if($edFlag==""){ //新規 //最終行の番号を取得 $lastNum = explode("<>", $lastRow); //今回の書き込み番号(num)を設定 if($lastNum!=FALSE){ $num = (int) $lastNum[0]; $num = $num+1; }else{ $num = 1; } //ファイルに書き込み $fp = fopen($filename,"a"); fwrite($fp, $num."<>".$name."<>".$comment."<>".$date."<>".PHP_EOL); fclose($fp); echo "新規書き込み成功!<br><br>"; }else{ //編集 $linesData = array(); $lines = file($filename, FILE_IGNORE_NEW_LINES); //最新の配列データを取得 foreach($lines as $line){ //現在のm3-5.txtデータを配列に保存 array_push($linesData, $line); } //txtファイルをクリア $fp = fopen($filename, "w"); fwrite($fp,""); fclose($fp); //txtファイルに書き写し $fp = fopen($filename, "a"); foreach($linesData as $lineData){ $postData = explode("<>", $lineData); $lineNum = (int) $postData[0]; if($lineNum!=$edFlag){ fwrite($fp, $lineData.PHP_EOL); }else{ fwrite($fp, $lineNum."<>".$name."<>".$comment."<>"."$f1Pass"."<>".$date."<>".PHP_EOL); echo $edFlag."番の投稿が編集されました。<br><br>"; } } fclose($fp); } } } ?> <form action ="" method="post"> <h4>【編集フォーム】</h4> <input type="number" name="edNum" placeholder="編集番号"> <input type="submit" name="edit" value="編集"> </form><br> <?php $filename="mission3-4.txt"; $lines = file($filename, FILE_IGNORE_NEW_LINES); $lastRow = array_pop($lines); //初期値設定 $edFlag = ""; $name = "名前"; $comment = ""; if(isset($_POST["edit"])){ //編集フォームのsubmitがあれば、投稿を呼び出す $edNum = $_POST["edNum"]; if($edNum!="" ){ //空白チェック $lines = file($filename, FILE_IGNORE_NEW_LINES); //最新の配列データを取得 //指定の番号の投稿を、編集できるように投稿フォームに書き写し foreach($lines as $line){ //変数名、この後かぶるけど上書きされて問題ないよね? $postData = explode("<>", $line); $lineNum = (int) $postData[0]; if($lineNum==$edNum){ $edFlag = $lineNum; $newname = $postData[1]; $mewcomment = $postData[2]; } } }else{ echo "※編集番号は必ず入力してください。<br>"; } } ?> <form action ="" method="post"> <h4>【削除フォーム】</h4> <input type="number" name="delNum" placeholder="削除番号"> <input type="submit" name="delete" value="削除"> </form><br> <?php //【削除】ファイルから削除 if(isset($_POST["delete"])){ $delNum = $_POST["delNum"]; $linesData = array(); if($delNum!="" ){ //フォームに入力されているかチェック $lines = file($filename, FILE_IGNORE_NEW_LINES); //最新の配列データを取得 foreach($lines as $line){ //現在のm3-4.txtデータを配列に保存 array_push($linesData, $line); } //txtファイルをクリア $fp = fopen($filename, "w"); fwrite($fp,""); fclose($fp); //txtファイルに書き写し $fp = fopen($filename, "a"); foreach($linesData as $lineData){ $postData = explode("<>", $lineData); $lineNum = (int) $postData[0]; if($lineNum!=$delNum){ fwrite($fp, $lineData.PHP_EOL); }else{ echo "<br>『".$lineNum."番の投稿が削除されました。』<br>"; } } fclose($fp); }else{ echo "※削除番号は必ず入力してください<br>"; } } ?> <h4>【掲示板】</h4> <?php //新たに書き込んだものもあるため再定義 $lines = file($filename,FILE_IGNORE_NEW_LINES); echo "-----------------------------------------------------------------<br>"; echo "<br>【投稿一覧】<br>"; foreach($lines as $line){ $finalData = explode("<>", $line); //elements Data echo $finalData[0]." ".$finalData[1]." ".$finalData[2]." ".$finalData[4]." <br>"; } ?> </body> </html>

試したこと

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

どこをどう改善すればよいのか、ご教示頂けますと幸いです。

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

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

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

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

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

guest

回答1

0

$edFlag, $newname, $mewcommentっていう変数に
ファイルから読み出してデータを代入していますが、
肝心の表示処理がありません。
編集用のフォームを追加表示するなどしないと機能しませんよね。

あと気になるのは、

php

1 //初期値設定 2 $edFlag = ""; 3 $name = "名前"; 4 $comment = "";

としておきながら、

php

1 if($lineNum==$edNum){ 2 $edFlag = $lineNum; 3 $newname = $postData[1]; 4 $mewcomment = $postData[2]; 5 }

としていて変数名の使い方(表記ゆれ)が見受けられます。
スペルミス(?)もありますし。


コーディングスタイル的なお節介をするなら。

HTMLを出力しながら、
条件分岐でフォーム入力やファイル入出力を処理を並行してやっていると、
コードがごちゃごちゃしてデバッグしづらくなる傾向にあります。
コードの冒頭でデータ処理を完結して表示用のデータは変数や配列に全て持った上で、
コードの後半で表示処理のみに専念したほうが見通しが良くなるかと。

新規投稿用フォームと編集投稿用フォームをかねようとするなら、
フォーム表示処理の前に、編集用データを特定する処理を完結しておかないといけなくなるので、
順序の見直しが必要になります。

投稿2021/07/20 00:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問