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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

0回答

3471閲覧

掲示板に「編集機能」を付加し,指定された番号の投稿を編集できるようにする

tosa123

総合スコア8

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

0グッド

0クリップ

投稿2020/09/11 02:33

編集2020/09/11 02:37

①【「入力フォーム」「削除フォーム」と並べて「編集番号指定用フォーム」を用意する】
②【POST送信で「編集対象番号」を送信。受信する際は、if文で既存の各フォームとはまた別に「編集フォーム」で処理を分岐させる】
③【ファイル読み込み関数で、ファイルの中身を1行1要素として配列変数に代入する。 ファイルを開き、先ほどの配列の要素数(=行数)だけループさせる】
④【ループ処理内:区切り文字「<>」で分割して、投稿番号を取得】

⑤【同・ループ処理内:投稿番号と編集対象番号を比較。イコールの場合はその投稿の「名前」と「コメント」を取得】
⑥既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる】
⑦【投稿フォーム内に「いま送信された場合は新規投稿か、編集か(新規登録モード/編集モード)」を判断する情報を追加する】
→投稿フォームが「新規投稿」と「編集」を兼ねているため「新規投稿か、編集か」を判断できるようにする必要がある。
作成の過程としてフォーム内に新しい項目(テキストボックス※)を用意して、そこに編集したい投稿番号が表示される状態にしておく
⑧【編集内容が問題ない場合:投稿番号と編集対象番号を比較して、等しい場合は、ファイルに書き込む内容を送信内容に差し替える】
→このフォ―ムから送信があった場合、
・上記テキストボックス内が空かどうか確認する:
・空でないときは、テキストファイルの中身を取り出し、各行の投稿番号を比較。
・一致した時のみ、編集のフォームから送信された値と差し替える。
・空のときは、通常の新規投稿として扱われるようにする。

この流れで掲示板に編集機能を付加して、指定した番号の名前とコメントを取得し、編集したいのですが、

【課題】
まず、⑥の段階がうまくいきません。名前とコメントを取得して、投稿フォームにうまく出力できない理由がわかりません。
そして、⑦、⑧の段階はなんとなくどこかが間違っているのはわかるのですが、具体的にどこが間違っているのかわからず、困っています。

php

1<?php 2 3 $name = $_POST['name']; 4 5 $comment = $_POST['comment']; 6 7 $delete = $_POST['delete']; 8 9 $edit = $_POST['edit']; 10 11 $date = date("Y/m/d H:i:s"); 12 13 $line = file("mission_3-4.txt"); 14 15 $num = count($line)+1; 16 17 $write = $num."< >".$name."< >".$comment."< >".$date.PHP_EOL; 18 19 $deletenumber = $_POST["deletenumber"]; 20 21 // ミッション3-1.2 22 23 if(isset($_POST["submit"]) && isset($comment) && isset($name)){ 24 25 $fp = fopen ("mission_3-4.txt","a"); 26 fwrite($fp,$write); 27 fclose($fp); 28 29 } 30 31 32 // ミッション3-3 削除機能 33 34 if (isset($deletenumber) && isset($delete)) { 35 36 for ($j = 0; $j < count($line) ; $j++) { 37 $deleteData = explode("< >", $line[$j]); 38 39 if ($deleteData[0] == $deletenumber) { 40 array_splice($line, $j, 1); 41 file_put_contents("mission_3-4.txt", $line); 42 } 43 } 44 } 45 46 47// ミッション3-4 編集機能 ②~⑤ 48 49 if (isset($POST["edit"])) { 50 51 $editContext = file("mission_3-4.txt"); 52 $editNumber = $_POST["editnumber"]; 53 for ($i = 0; $i < count($editContext) ; $i++) { 54 $editData = explode("< >", $editContext[$i]); 55 if ($editData[0] == $editNumber) { 56 57 $editName = $editData[1]; 58 $editComment = $editData[2]; 59 60 61 62 } 63 } 64 } 65 66?> 67 68 69<!DOCTYPE html> 70<html> 71 72<head> 73<meta charset="UTF-8"> 74</head> 75 76<body> 77 78 <form method="POST" action="<?php echo($_SERVER["PHP_SELF"]) ?>"> 79 80 <input type="text" name="name" value="<?php echo $editName; ?>"> 81 <input type="text" name="comment" value="<?php echo $editComment; ?>"> 82 <input type="submit" value="投稿する" name="submit"> 83 </form> 84 85 86 87 <form method="POST" action="<?php echo($_SERVER["PHP_SELF"]) ?>"> 88 89 <input type="number" name="deletenumber"> 90 <input type="submit" value="削除する" name="delete"> 91 92 </form> 93 94 <!--①--> 95 96 <form method="POST" action="<?php echo($_SERVER["PHP_SELF"]) ?>"> 97 98 <input type="number" name="editnumber"> 99 <input type="submit" value="編集する" name ="edit"> 100 101 </form> 102 103 <!--⑦--> 104 105 <form method="POST" action="<?php echo($_SERVER["PHP_SELF"]) ?>"> 106 107 <input type="number" name="checkEditnumber" value="<?php echo $_POST["editnumber"];?>"> 108 109 110 </form> 111 112 113 114 <?php 115 116 // ミッション3-4はメインここ ⑦、⑧以下 117 118 $filename="mission_3-4.txt"; 119 $comments = file($filename,FILE_IGNORE_NEW_LINES); 120 121 122 if(isset($_POST["checkEditnumber"])){ 123 if(isset($_POST["submit"])){ 124 125 for ($b = 0; $b < count($comments) ; $b++) { 126 $realEditData = explode("< >", $comments[$b]); 127 128 if ($realEditData[0] == $_POST["editnumber"]) { 129 $realEditData[1] = $_POST["name"]; 130 $realEditData[2] = $_POST["comment"]; 131 132 $newData = $realEditData[0] . $realEditData[1] .$realEditData[2] . $realEditData[3] .PHP_EOL; 133 $newData = array($realEditData[0] -> $newData ); 134 135 $newComments = array_replace($comments, $newData); 136 file_put_contents("mission_3-4.txt", $newComments); 137 } 138 139 } 140 141 } 142 143 } 144 145 foreach($comments as $comment){ 146 $maintext = explode("< >", $comment); 147 echo $maintext[0] . $maintext[1] . $maintext[2] . $maintext[3] ; 148 echo "<br>"; 149 150 } 151 152 153 154 155 156 157 158 159 160 ?> 161 162</body> 163</html>

幾つかこのサイト内で似たような記事は見たのですが、それを参考にしても中々上手くいきません。
汚いコードですが、どうかよろしくお願いします。

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

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

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

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

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

m.ts10806

2020/09/11 02:55

>幾つかこのサイト内で似たような記事は見たのですが、それを参考にしても中々上手くいきません。 似たような記事が多いというか、たぶん同じ講座か書籍なんだと思います。 そしてそれらの多くでテキストにデータを保存することが悪手である(または今後役に立たない)ことは言及されていたかと思います。 結局1つ1つデバッグして確かめていくしかないのですが、そういうデバッグの手法を全く教えない講座・書籍であればそれこそこの先使える技術は育たないので、早いところ切り替えた方が良いです。 (この「PHP 掲示板 テキスト保存」に関する質問に対する回答者の反応はどんどん鈍化してるような感覚です)
tosa123

2020/09/11 03:03

わかりました。ありがとうございます。 ですが、この自分が作成したコードのどこら辺がダメで機能しないのかを理解して切り替えたいです…。
m.ts10806

2020/09/11 03:19

起きている問題以外にもダメな点が沢山あるので、そこを修正するところからになります。 先に書いたように地道にデバッグすれば辿り着ける内容です。
tosa123

2020/09/11 03:46

具体的にデバックはどうやっていけばよいのでしょうか。
tosa123

2020/09/11 05:27

とりあえず今一度自分で調べてみようと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問