■ 解決したいこと
<理解できないこと>
ドットインストールで簡易掲示板を作るレッスンを学習していた。その時に投稿フォームから送った、メッセージと名前の入力データがデータファイルであるbbs.datに書き込まれないという問題が発生している。
動画
https://gyazo.com/6eff4c24a9d4c1d5a90969de3b8a12fb
しかし、自分では、解決することができなかった。
どのようにすれば、入力データがbbs.datに書き込まれるようになるでしょうか?
<理解できること>
bbs.datは、index.phpと同じディレクトリに作成したこと。また、パーミッションの設定においても、書き込みが誰でもできるように設定している。
動画
https://gyazo.com/030eb1f12b2181d4cccc1ddc46abc1f2
Teratailに自分と同じ問題が発生した方の質問に対する回答を参考にしたが、解決できなかった。
https://teratail.com/questions/113439
■ 自力で調べた内容
Google検索キーワード
: ドットインストール dataファイル 書き込まれない
1.https://dotinstall.com/lessons/bbs_php_v2/24504
2.https://teratail.com/questions/21002
3.https://teratail.com/questions/113439
■ 仮説と検証作業の結果
仮説
ファイル名や入力データがbbs.datに書き込まれる処理を実行するプログラムが間違っていると考えた。
検証
Bbs.datというファイル名を確認した。
3行目のコードを確認した。
$dataFile = 'bbs.dat';
52行目のコードを確認した。
$fp = fopen($dataFile, 'a');
61行目のコードを確認した。
$posts = file($dataFile, FILE_IGNORE_NEW_LINES);
結果
自分が検証した限りにおいて、ファイル名やプログラムの記述は合っていた。
<?php $dataFile = 'bbs.dat'; session_start(); function setToken() { $token = sha1(uniqid(mt_rand(), true)); $_SESSION['token'] = $token; } function checkToken() { if (empty($_SESSION['token']) || $_SESSION['token'] != $_POST['token']) { echo "不正なPOSTをが行われました"; exit; } } function h($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); } function redirect() { header('Location: http://' .$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit; } if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['message']) && isset($_POST['user'])) { checkToken(); //投稿された後 $message = trim($_POST['message']); $user = trim($_POST['user']); if ($message !== '') { $user = ($user === '') ? 'ななしさん' : $user; $message = str_replace("\t", ' ', $message); $user = str_replace("\t", ' ', $user); $postedAt = date('Y-m-d H:i:s'); $newData = $message . "\t" . $user . "\t" . $postedAt . "\n"; $fp = fopen($dataFile, 'a'); fwrite($fp, $newData); fclose($fp); } redirect(); } else { setToken(); } $posts = file($dataFile, FILE_IGNORE_NEW_LINES); $posts = array_reverse($posts); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>簡易掲示板</title> </head> <body> <h1>簡易掲示板</h1> <form action="" method="post"> message:<input type="text" name="message" > user:<input type="text" name="user" > <input type="submit" value="投稿" > <input type="hidden" name="token" value="<?php echo ($_SESSION['token']); ?>" > </form> <h2>投稿一覧(<?php echo count($posts); ?>件)</h2> <ul> <?php if(count($posts)) : ?> <?php foreach ($posts as $post) : ?> <?php list($message, $user, $postedAt) = explode("\t", $post); ?> <li><?php echo h($message); ?><?php echo h($user); ?><?php echo h($postedAt); ?> </li> <?php endforeach; ?> <?php else : ?> <li>まだ投稿はありません。</li> <?php endif; ?> </ul> </body> </html> PHP