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

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

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

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

Q&A

0回答

598閲覧

php 簡易掲示板 編集機能

morimoritamori

総合スコア1

PHP

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

0グッド

0クリップ

投稿2020/11/23 05:42

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

<html lang="ja"> <head> <meta charset="UTF-8"> <title>mission3-5</title> </head> <body> <?php $edit = $_POST["edit"]; $id = $_POST["id"]; if(isset($edit)) { // ここは編集番号よりデータを求める所 // データ件数分処理 $filename = "mission3-5.txt"; $lines = file($filename); foreach($lines as $row) { // <>で分割して配列に $bbsRowData = explode("<>", $row); // 編集対象番号のときはデータをセットする if($bbsRowData[0] == $_POST["edit"]) { $editNumber = $bbsRowData[0]; $editName = $bbsRowData[1]; $editComment = $bbsRowData[2]; // 即抜ける break;}}} ?> <form action="" method="post"> <span>【 投稿フォーム 】</span><br> <span>名前:    </span> <input type="text" name="name" value="<?php echo $editName; ?>"><br> <span>コメント:  </span> <input type="text" name="comment" value="<?php echo $editComment; ?>"><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 name="id" value="<?php echo $edit; ?>"> <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"; $id = $_POST["id"]; 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) &&empty($id)){ $p = fopen($filename,"a"); $total = (max(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>";} } elseif(!empty($id)){ echo "hello"; } ?> </form> </body>

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

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

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

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

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

tanat

2020/11/23 17:32

おそらくインターンシップの課題かと思いますが、ソースをネット上に公開してしまって問題無いか確認を取る方が良いかと思いますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問