前提・実現したいこと
テキストファイルのデータを配列として読み込み、foreachを使い、explode関数も使い、画面に出力したいです。
ここに質問の内容を詳しく書いてください。
PHPで簡易的な掲示板を作っています。
投稿内容を別のテキストファイルに保存して、送信の下に出力する機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Warning: Invalid argument supplied for foreach() in /home/◯◯◯.com/public_html/keijiban.php on line 36
該当のソースコード
<?php $filename = 'keiziban.txt'; // 変数filenameを宣言 function h($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); //phpの文字化け対策 }; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $name = $_POST['name']; $comment = $_POST['comment']; $time = date('Y年m月d日 H時i分s秒'); if (file_exists($filename)) { $number = count(file($filename))+1; } else { $number = 1; } // ファイルがあれば、番号は+1した値を代入、なかったら、番号は1 $datalist = $number."<>". $name."<>".$comment."<>".$time."\n"; $fp = fopen($filename, 'a'); // 変数filenameを追記モードで開き、変数fpに代入 fwrite($fp, $datalist); // 変数fpに変数datalistに書き込まれたデータを代入 fclose($fp); // 変数をfpを閉じた。 } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>keiziban</title> </head> <body> <form action="" method="post"> 名前: <input type="text" name="name"> コメント: <input type="text" name="comment"> <input type="submit" value="送信"> </form> <?php $datalists = file($datalist);// 変数datalistsを宣言し、変数datalistを配列に変換して代入している。 foreach ($datalists as $value) { //$datalistsのvalueがある分だけ次の処理を行う list($number, $name, $comment, $time) = explode("<>", $datalists); echo h($number); echo h($name); echo h($comment); echo h($time); } ?> </body> </html>
試したこと
explodeを使わず、implodeも試したのですが、ダメでした。
僕の憶測なのですが、$numberが既に配列化していてそれを配列にもう一度しようとしているのかなと思っています。
大変恐縮ですが$numberを並列化しない方法も踏まえて教えていただけると幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/20 06:39
退会済みユーザー
2019/02/20 06:40
退会済みユーザー
2019/02/20 06:44
2019/02/20 06:49
2019/02/20 06:59
退会済みユーザー
2019/02/20 09:32