🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

1回答

3980閲覧

php 簡易投稿版 編集機能の追加

morimoritamori

総合スコア1

PHP

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

0グッド

0クリップ

投稿2020/11/22 01:06

編集2020/11/23 02:40

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
phpで簡易掲示板の作成をする過程で、投稿を編集する機能を実装しようとしているのですが、取得した投稿番号に一致する名前とコメントをフォーム内に表示する方法がわからず詰まっています。ここで投稿番号に一致した名前とコメントを編集することし上書きすることで編集という機能にしたいと考えています。
流れとしては以下の通りです
【「入力フォーム」「削除フォーム」と並べて「編集番号指定用フォーム」を用意・「編集対象番号」の入力と「編集」ボタンが1つある】
【POST送信で「編集対象番号」を送信。受信する際は、if文で既存の各フォームとはまた別に「編集フォーム」で処理を分岐させる】
【ファイル読み込み関数で、ファイルの中身を1行1要素として配列変数に代入する。 ファイルを開き、先ほどの配列の要素数(=行数)だけループさせる】
【ループ処理内:区切り文字「<>」で分割して、投稿番号を取得】
【同・ループ処理内:投稿番号と編集対象番号を比較。イコールの場合はその投稿の「名前」と「コメント」を取得】
【既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる】
【既存の投稿フォーム内に「いま送信された場合は新規投稿か、編集か(新規登録モード/編集モード)」を判断する情報を追加する】
投稿フォームが「新規投稿」と「編集」を兼ねているため「新規投稿か、編集か」を判断できるようにする必要がある。
作成の過程としてフォーム内に新しい項目(テキストボックス※)を用意して、そこに編集したい投稿番号が表示される状態にしておこう
(※これは最終的に利用者から見えないようにします)。
【編集内容が問題ない場合:投稿番号と編集対象番号を比較して、等しい場合は、ファイルに書き込む内容を送信内容に差し替える】
このフォ―ムから送信があった場合、
・上記テキストボックス内が空かどうか確認する:
・空でないときは、テキストファイルの中身を取り出し、各行の投稿番号を比較。
・一致した時のみ、編集のフォームから送信された値と差し替える。
・空のときは、通常の新規投稿として扱われるようにする。
【上記でフォームに追加した情報が、ブラウザから見えてしまう場合は、type属性をhiddenに変更して見えなくする】

エラーメッセージ

該当のソースコード

<html lang="ja"> <head> <meta charset="UTF-8"> <title>mission3-5</title> </head> <body> <form action="" method="post"> <span>【 投稿フォーム 】</span><br> <span>名前:    </span> <input type="text" name="name"><br> <span>コメント:  </span> <input type="text" name="comment"><br> <span>パスワード: </span> <input type="text" name="password"><br> <input type="submit" value="送信"> <span>【 削除フォーム 】</span><br> <span>投稿番号:  </span> <input type="number" name="delete"><br> <span>パスワード: </span> <input type="text" name="password"><br> <input type="submit" value="削除"> <span>【 編集フォーム 】</span><br> <span>投稿番号:  </span> <input type="number" name="edit"><br> <span>パスワード: </span> <input type="text" name="password"><br> <input type="submit" value="編集"><br> <?php $name = $_POST["name"]; $delete = $_POST["delete"]; $comment = $_POST["comment"]; $edit = $_POST["edit"]; $dates = date('Y年m月d日 H時i分s秒'); $filename = "mission3-5.txt"; echo "----------------"."<br>"."<br>"; if(empty($name)){ echo "Error:name is empty"; } elseif(empty($comment)){ echo "Error:comment is empty"; } elseif(empty($password)){ echo "Error:password is empty"; } echo "<br>"."<br>"."----------------"."<br>"; echo "----------------------"."<br>"."[投稿一覧]"."<br>"; if(!empty($name) && !empty($comment)){ $p = fopen($filename,"a"); $total = (count(file($filename))+1)."<>".$name."<>".$comment."<>".$dates.PHP_EOL; fwrite($p,$total); fclose($p); $lines = file($filename); foreach($lines as $line){ $contents = explode("<>",$line); $postnumber = $contents[0]; $fullnamer = $contents[1]; $commenter = $contents[2]; $dater = $contents[3]; echo $postnumber; echo $fullnamer; echo $commenter; echo $dater."<br>";} } elseif(isset($delete)){ $delcon=file($filename); //file関数で開くテキストファイルの指定 $fp=fopen($filename,"w"); for($j=0; $j<count($delcon); $j++){ $deldata=explode("<>",$delcon[$j]); if($deldata[0] != $delete){ fwrite($fp,$delcon[$j]); }else{ fwrite($fp, ""); } } $lines = file($filename); foreach($lines as $line){ $contents = explode("<>",$line); $postnumber = $contents[0]; $fullnamer = $contents[1]; $commenter = $contents[2]; $dater = $contents[3]; echo $postnumber; echo $fullnamer; echo $commenter; echo $dater."<br>";} } if(isset($edit)) { // ここは編集番号よりデータを求める所 // データ件数分処理 $lines = file($filename); foreach($lines as $row) { // <>で分割して配列に $bbsRowData = explode("<>", $row); // 編集対象番号のときはデータをセットする if($bbsRowData[0] == $_POST["number"]) { $editNumber = $bbsRowData[0]; $editName = $bbsRowData[1]; $editComment = $bbsRowData[2]; // 即抜ける break;}}} ?> </form> </body>

試したこと

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

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

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

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

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

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

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

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

m.ts10806

2020/11/22 02:16

質問に「初心者アイコン」をつけられるのでわざわざ書く必要はありません。 質問は編集できます。
morimoritamori

2020/11/22 02:18

ありがとうございます! 初めての利用であまり理解できていなかったので助かります。
m.ts10806

2020/11/22 04:28

質問は編集できます。
guest

回答1

0

ベストアンサー

取得した投稿番号に一致する名前とコメントをフォーム内に表示する

ひとまず、この点のみを達成する手順を説明させていただきます。ページのレイアウトが崩れます(投稿一覧がページの上に来てしまう、など)が、ご容赦ください。

(1)
まず、<?phpから?>までをソースファイルの先頭へ移動してください。

(2)
次に、$editCommentなどをセットする部分のif文が間違ってると思うので修正しましょう。
投稿番号のパラメータ名は、numberではなくeditですね。

php

1if($bbsRowData[0] == $_POST["edit"]) {

(3)
最後に、編集フォームのinput要素に、編集対象データを初期値として出力します。
例えばコメント欄なら、↓こんな感じ。

php

1<input type="text" name="comment" value="<?php echo $editComment ?? ''; ?>"><br>

※HTMLエスケープは割愛しました(真似しちゃダメよ)。

投稿2020/11/22 01:53

gpsoft

総合スコア1323

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

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

morimoritamori

2020/11/22 01:59

inputのvalueの値として出力するんですね。 ありがとうございます。 早速試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問