こちらを参考に作ってみました。
[PHP]1行チャットプログラム
ロジック部分
<?php
$filename = 'chat_data.dat'; //チャットのデータを格納するファイル
if(isset($_POST['name']) || isset($_POST['comment'])) {
$name = $_POST['name'];
$comment = $_POST['comment'];
date_default_timezone_set('Asia/Tokyo');
file_put_contents($filename, date("y/m/d H:i").",".$name.",".$comment."\n", FILE_APPEND); //ファイルへの書き込み(1書き込みごとに改行する)
}
$contents = file_get_contents($filename); //ファイルの読み込み
$lines = explode("\n", $contents); //読み込んだ内容を1書き込みごとに分け、配列に入れる
?>
...
<?php
foreach($lines as $value) {
list($date, $name, $comment) = array_pad(explode(",", $value, 3), 3, null); //$linesをさらに","ごとに分け、それぞれ$date, $name, $commentに格納
?>
<tbody>
<tr>
<td><?php echo $date; ?></td>
<td><?php echo $name; ?></td>
<td><?php echo $comment; ?></td>
</tr>
</tbody>
<?php } ?>
制作物
![chat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076475/31c16345-91b3-a23a-f7b3-445343c75c2d.png)学んだこと
・ファイル操作
file_put_contents($filename, date("y/m/d H:i").",".$name.",".$comment."\n", FILE_APPEND); //ファイル書き込み。FILE_APPENDはファイルの最後に追記することを表す
file_get_contents($filename); //ファイル読み込み
・文字列を任意の文字列で分割
$lines = explode("\n", $contents);
・array_pad()
list($date, $name, $comment) = array_pad(explode(",", $value, 3), 3, null);
explode()によって返される配列を3に制限し、返される値が3未満の場合、3になるまでnullが追加されるそう。
最初foreachで回す部分を
<?php
foreach($lines as $value) {
$data = explode(",", $value);
?>
<table>
<tr>
<td><?php echo $data[0]; ?></td>
<td><?php echo $data[1]; ?></td>
<td><?php echo $data[2]; ?></td>
</tr>
</table>
<?php } ?>
こう書いていましたが、「Undefined offset: 1」「Undefined offset: 2」が消えず、、、
ロジック部分の該当箇所に修正したら消えました。
あと、list(変数1, 変数2,,,)の書き方初めて知った。便利そう!