- ベストアンサー
PHPファイル操作:ブラウザに発言履歴が残らない問題の修正方法
- PHPのファイル操作を使って、テキストボックスの値をPOSTで送信し、日時とユーザが入力した値をファイルに保存するプログラムを作成しました。しかし、ブラウザに発言履歴が残らない問題が発生しています。どの部分を修正すればいいでしょうか?
- 作成したプログラムでは、テキストボックスから送信された値をファイルに追記する処理が行われます。しかし、ファイル書き込みが失敗している可能性も考えられます。修正する必要があるのは、ファイル書き込みの部分です。
- また、ファイルの読み込み処理も含まれています。ファイルが存在しない場合や読み込みに失敗した場合に対処する処理が必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず動くようにはしてみました。 直したところなど ・「= [];」 による空配列の宣言はウチだと動かなかったんで「$work = array();」にしてます ・2個目のfopen() で、ファイル読み込みモードは'r'です ・print "\n"; は何したいかわからなかったので消しました ・ファイル読み込み部のインデントが括弧と合ってません。とりあえずファイルを読めるようにはしました ・「<p><?php print $date; $value ?></p>」はちょっと意味がなさそうです。 $value のみ表示します あとエラーではありませんが ・ファイル書き込み失敗をそこでprintしてしまうと、<!DOCTYPE>宣言の前になってしまいます → <head>~</head> 内にプログラムを書くと良いでしょう ということで ----ここから---- <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <?php $filename = './review.txt'; $comment = ''; $date = date('m/d H:i:s'); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['comment']) === TRUE) { $comment = $_POST['comment']; } if (($fp = fopen($filename, 'a')) !== FALSE) { $result = fwrite($fp, $comment . '-' . $date . "\n"); if ($result === FALSE) { print 'ファイル書き込み失敗: ' . $filename; } fclose($fp); } } $work = array(); if (is_readable($filename) === TRUE) { if (($fp=fopen($filename,'r')) !== FALSE) { while(($tmp = fgets($fp)) !==FALSE) { $work[] = htmlspecialchars($tmp,ENT_QUOTES,'UTF-8'); } fclose($fp); } } else { $work[] = 'ファイルがありません'; } ?> </head> <body> <h1>ファイル操作</h1> <form method="post" > <label><p>発言:<input type="text" name="comment"><input type="submit" value="送信"></p></label> </form> <p>発言一覧</p> <?php foreach ($work as $value){?> <p><?php print $value ?></p> <?php } ?> </body> </html> ----ここまで----
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5241/13712)
24行目のファイルをオープンしている所を直しましょう。 モードの 'a' は書き込みようとしてファイルを開いているので、その後のfget()は動作しません。
1:ファイルには入力した文字列が保存されていますか? 保存されていないのであればPOSTか書き込み処理に問題があります 2:仮の内容をファイルに入力したら、それらは表示されますか? 表示されないならば、ファイルの表示処理を見直しましょう (ソースを読む気はありません)
お礼
無事に解決できました。 ご丁寧にありがとうございます。