プログラミング初心者の Qiita 初投稿なのでヘタクソな文面、ご了承ください。
PHP を習いたてで、下記のような流れで制作していて少しつまずいた点を書いていきます。
- 「post.php」というファイルで form を作成し「write.php」へ送信
- 「write.php」から「data.txt」へデータを書き込み
- 「data.txt」のデータを「read.php」というデータで読み取り
今回詰まったところは上記 3 の手順です!
ということで自分が詰まって、解決まで数時間かかった超しょぼいオチをご覧ください。
まず、「data.txt」は以下のデータが入っております。
2021-11-25 06:37:41,たけし,a@g.com,29
2024-6-09 12:08:26,まさる,aghf@aggaag.com,40
左から順に「日付, 名前, メールアドレス, 年齢」です。
今回は 2 人がフォームを送ってくれたので、 2 行です。
はい、そして僕が最初に書いたのはこちら ↓
<?php
$filename = 'data/data.txt';
$fp = fopen($filename, 'r');
while (!feof($fp)) {
$txt = fgets($fp);
$datas = explode(",", $txt);
$lines = file($filename);
print_r($lines);
}
fclose($fp);
echo __FILE__;
?>
<tr>
<td><?= $datas[0]; ?></td>
<td><?= $datas[1]; ?></td>
<td><?= $datas[2]; ?></td>
<td><?= $datas[3]; ?></td>
</tr>
うん、意味わからんコードだ。
ちなみに出力結果としては、こんなんでした ↓
2024-6-09 12:08:26 まさる aghf@aggaag.com 40
まさるしか受け取れねーよ!!!ってキレてました。
なぜか最後の行のデータしか取得ができませんでした。
その後はこんな解決法を模索 ↓
- include() の値を取得して編集して配列にできねえかなあ
- 一旦行ごとに配列にしないといけないのでは?
ちなみに一行ごとに配列にはこちらでできました ↓
// 行ごとに配列にする処理
$file = dirname(__FILE__) . '/data/data.txt'; // dirname(__FILE__) でファイルまでのデータのパスを取得
$array = @file($file, FILE_IGNORE_NEW_LINES);
print_r($array);
結局原因はただただ、繰り返し処理の while の中に出力処理を入れてなくて、もはや PHP の中から飛び出してかいておりました。
この部分 ↓
<tr>
<td><?= $datas[0]; ?></td>
<td><?= $datas[1]; ?></td>
<td><?= $datas[2]; ?></td>
<td><?= $datas[3]; ?></td>
</tr>
要はこれを while 文の中に書いて整えるだけでしゅーりょー。
4 時間くらい溶かしたのでは。。。?
// .txt データを配列にする処理
$fp = fopen('data/data.txt', 'r'); // fopenでファイルを開く('r'は読み込みモードで開く)
while (!feof($fp)) { // feof は最後までの読みこれたかどうか。while の時に使用する。
$txt = fgets($fp);// fgetsでファイルを読み込み、変数に格納
// 下記で呼び出し表示
$ary = explode(",", $txt);
print "<tr>";
print "<td>$ary[0]</td>";
print "<td>$ary[1]</td>";
print "<td>$ary[2]</td>";
print "</tr>";
}
fclose($fp); // fcloseでファイルを閉じる
?>
これからも頑張ろう。