dポイントプレゼントキャンペーン実施中!

テキストボックスの値をPOSTで送信し、日時とユーザが入力した値を1行ずつファイル(review.txt)に保存し、ページ下部にファイル内容を1行ずつ表示するプログラムを作成しましたが、ブラウザに発言履歴が残りません。どの部分を修正すればいいですか?

<?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 = [];

if (is_readable($filename) === TRUE) {
print "\n";
if(($fp=fopen($filename,'a')) !== FALSE) {
print "\n";}
while(($tmp = fgets($fp)) !==FALSE) {
print "\n";
$work[] = htmlspecialchars($tmp,ENT_QUOTES,'UTF-8');
}
fclose($fp);
}
else {
print "\n";
$work[] = 'ファイルがありません';
}
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</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 $date; $value?></p>
<?php } ?>
</body>
</html>

A 回答 (2件)

fopen の第2引数 mode に 'a' を指定すると、


ファイルへの追記動作となるため読み込みできません。
読み込みをする場合は 'r' を指定しましょう。
https://www.php.net/manual/ja/function.fopen.php

if や while の条件式の中で代入処理を行うと、
記載内容が複雑になり初心者が問題を見つけづらくなるので、
個人的には分離して書くべきかと思っています。

修正案
if(($fp=fopen($filename,'a')) !== FALSE) {

$fp = fopen($filename, 'r');
if ($fp !== FALSE) {
    • good
    • 0

ブラウザの発信履歴とは、ブラウザのどこの部分のことでしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!