みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

「次へ」が押されたらファイルのデータを1行づつ表示

php初心者です。よろしくお願いします。
今、練習も兼ねてユーザが誰でも書き込める簡易掲示板のようなものを作成中です。

まず、用意したのが、入力フォーム用のinput.phpファイルと、
入力されたデータを書き込むdata_file.txt、
それと、データを表示させるoutput.phpファイルです。

input.phpファイルにはテキストが入力できる3つのフォームが配置され、それぞれのデータが入力され、登録ボタンが押されたらdata_file.txtに下記のように書き込まれるようにしています。

りんご,バナナ,パイナップル\n
みかん,オレンジ,すいか\n…

そこまでは何とかできたのですが、このデータをoutput.phpファイルに順番に表示されるところでつまずいています。

表示のさせ方は、まずinput.phpファイルの入力フォームで登録すると、output.phpの表示に切り替わり、入力したデータがちょうどカンマのある箇所で改行したいと思います。

りんご
バナナ
パイナップル

という感じでしょうか?
それから、その下には「次へ」のテキストリンクがあるのですが、「次へ」をクリックされたら、過去に入力されたデータがレコード順に表示されるという仕組みにしたいと思います。

どなたか、方法を伝授していただけたらと思います。
よろしくお願いします。

投稿日時 - 2009-01-15 18:26:27

QNo.4632685

困ってます

質問者が選んだベストアンサー

とりあえず、全部一気にやろうとしない方がいいですよ
まずはどんな形でも全件表示することから始めましょう
それが出来たら、次は「,」で改行した状態で表示 という感じで
自分のやりたいことに少しずつ近づいていった方が勉強になりますよ

もし途中まででも出来ているコードがあるなら
出した方がアドバイスは貰い易いと思います
(今の状態だと丸投げみたいなもんです)

とりあえず希望に沿える感じのコードは思いついて動作もOKでしたが
お勉強中ということなので提示はしませんが考え方のヒントだけ。

○ 配列の展開はforeachを使い、keyとvalueにわけておく
○ foreachの中でカンマを<br>に置換して表示する
これでカンマ毎に改行された全件データの表示が出来ます
(\nは置換しないので見た目ちょっと悪いですが気にしない)

あとは最新から1件ずつ表示することが出来れば完成ですね
配列はkeyとvalueに分けていますから、最新データは
key=0の時のデータだけを表示すれば良いです

で、データ件数は動的なものなので、keyと比較するものは変数にします
この変数の値が次へを押したときに1増えれば次のデータが表示されます
なので、次へのaタグに変数も持たせます

最後に、keyと比較する変数は一番最初に開いたときは「0」
次へを押した時は受け取った変数 +1 という処理を入れます
※ 最後とは言いましたが、処理的には一番最初に無いといけません

頑張って下さいねー

投稿日時 - 2009-01-15 20:36:12

お礼

どうもありがとうございます!
なるほど…確かに丸投げです^^;
このような書き込みはとてもありがたく思います。
先ばかりを急がず、まずはひとつづつから。
参考にさせていただきます!

投稿日時 - 2009-01-16 09:44:12

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

mpx

>> どなたか、方法を伝授していただけたらと思います。
こんなので如何でしょう。(入力チェックは省略しています)
----[input.php]----
<html><body>
<form method='POST' action='output.php'>
<input type="text" name="data[]">
<input type="text" name="data[]">
<input type="text" name="data[]">
<input type="submit">
</form>
</body></html>
---- End oF File ----

----[output.php]----
<html><body>
<?php
if (isset($_POST['data'])){
$data=$_POST['data'];
$fp = fopen('data_file.txt', 'a');
fputcsv($fp, $data);
fclose($fp);
}
$row = 0;
$fp = fopen('data_file.txt', "r");
while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
$row++;
if ($row==$_GET['line']){
for ($c=0; $c < 3; $c++) {
echo $data[$c] . "<br />\n";
}
break;
}
$new=$data;
}
if (!isset($_GET['line'])){
for ($c=0; $c < 3; $c++) {
echo $new[$c] . "<br />\n";
}
}
fclose($fp);
echo '<a href="output.php?line='.($row-1).'">次へ</a><br />';
?>
</body></html>
---- End oF File ----

投稿日時 - 2009-01-15 22:28:24

お礼

ありがとうございました!
たぶん、私が作成するコードとは最終的に変わってくるとは思いますが、参考にさせていただきます!
見てもチンプンカンプンなコードが多いので、辞書片手に勉強させてもらいます。(^^)

投稿日時 - 2009-01-16 09:46:20

あなたにオススメの質問