前提・実現したいこと
inputで作った枠に書き込みされた値を$dataに配列として格納し、それをhtml内でforeachで出力して表示しているのですが、1列ではなく書き込みされた値ごとに改行させて表示させたいです。
何かいい方法はありますでしょうか?
--質問修正を受けて追記--
失礼しました。遅くなってしまい申し訳ありません。具体的にはhtmlで出力された時に、例えば
2019-03-14 07:00:00 今日は天気がよかった
2019-03-15 07:00:00 今日は天気が悪かった
2019-03-16 07:00:00 今日も天気が悪かった
このように改行させて表示させたいのですが、
今自分がやった内容のままだとchallenge_log.txtでは
"2019-03-14 21:12:26 今日は天気がよかった2019-03-14 21:12:33 今日は天気が悪かった2019-03-14 21:12:38 今日も天気が悪かった"
このように1行で、新しいコメントを送信すると空白なしで表示されます。
試したこと
php内でforeach文を書く時は<br />を使えばよかったので簡単だったのですが、html内でそれをやっても上手く行きませんでした。
HTML内の下の方にある <p><?php print $read; ?></p>というコードのところに<br />や\nを入れても全く変化がありませんでした。
PHP
1<?php 2 3$filename = './challenge_log.txt'; 4$comment = ''; 5$log = date('Y-m-d H:i:s') . " "; 6 7if ($_SERVER['REQUEST_METHOD'] === 'POST') { 8 9 if (isset($_POST['comment']) === TRUE) { 10 $comment = $_POST['comment']; 11 } 12 13 if (($fp = fopen($filename, 'a')) !== FALSE) { 14 if (fwrite($fp, $log) === FALSE) { 15 print 'ファイル書き込み失敗: ' . $filename; 16 } 17 fclose($fp); 18 } 19 20 if (($fp = fopen($filename, 'a')) !== FALSE) { 21 if (fwrite($fp, $comment) === FALSE) { 22 print 'ファイル書き込み失敗: ' . $filename; 23 } 24 fclose($fp); 25 } 26} 27 28$data = array(); 29 30if (is_readable($filename) === TRUE) { 31 if (($fp = fopen($filename, 'r')) !== FALSE) { 32 while (($tmp = fgets($fp)) !== FALSE) { 33 $data[] = htmlspecialchars($tmp, ENT_QUOTES, 'UTF-8'); 34 } 35 fclose($fp); 36 } 37} else { 38 $data[] = 'ファイルがありません'; 39} 40?> 41<!DOCTYPE html> 42<html lang="ja"> 43 <head> 44 <meta charset="UTF-8"> 45 </head> 46 <body> 47 <form method="post"> 48 発言 49 <input type="text" name="comment"> 50 <input type="submit" value="送信"> 51 </form> 52 <p>発言一覧</p> 53<?php foreach ($data as $read) { ?> 54この下の$readの所に 55 <p><?php print $read; ?></p> 56<?php } ?> 57 </body> 58</html>
回答2件
あなたの回答
tips
プレビュー