• ベストアンサー

DBのデータを表示させたい

こんにちは PHPは今まで他人様の作成したスクリプトをそのまま使用したりちょこっと改造するだけでしたが、 現在必要としているスクリプトが探してもなさそうなので 自分で作成しようと決めて勉強を始めましたが どうしても悩んでいる部分があるのでご教授いただけると助かります。 環境は以下の通りです apache 1.3.37 PHP 5.25 MySQL 5.0 現在の状況なのですが `uid` mediumint(8) NOT NULL auto_increment, `user` varchar(25) NOT NULL, `pass` varchar(32) NOT NULL, `place` varchar(32), `sev` varchar(32), `date` varchar(25) NOT NULL, `regdate` datetime, `gate` varchar(25), `statue` varchar(25), PRIMARY KEY (`uid`), KEY `user` (`user`), KEY `date` (`date`), KEY `gate` (`gate`), KEY `statue` (`statue`) このようなテーブルが作成してありユーザーがフォームから登録したものをDBに保存していき、 1ページに数件分ずつの表示で何ページにもわたって 全件を表示するようなページをです。 フォームからDBへのデータの保存はできるようになりましたが 表示をする際に何件もの表示をするのにどういった手法で行うのがいいのかで悩んでいます。 現在は最新の1件だけ表示されるようなページになっています。 <?php include ("config.php"); $con = mysql_connect($dbhost, $dbuser, $dbpasswd); $selectdb = mysql_select_db($dbname, $con); $sql = "SELECT * FROM testdata ORDER BY regdate DESC"; $rst = mysql_query($sql, $con); $datanum = mysql_num_rows($rst); if ($datanum < 1) { print("データがありません。<br>\n"); print("登録は <a href=\"regist.php\">こちら</a> から"); mysql_close($con); exit; } $data = mysql_fetch_array($rst) ?> <table width="95%" border="0" cellspacing="1"> <tr> <td><table width="100%" border="0"> <tr <td colspan="6">登録情報</td> </tr> <tr> <td width="13%">登録者名</td> <td width="20%"> <?=$data['user']?> </td> <td width="13%">場所</td> <td width="20%"> <?=$data['place']?> </td> <td width="13%">サーバー</td> <td width="20%"> <?=$data['sev']?> </td> </tr> <tr> <td>登録日時</td> <td> <?=$data['regdate']?> </td> <td>日時</td> <td> <?=$data['date']?> </td> <td colspan="2">&nbsp;</td> </tr> </table></td> </tr> <tr> <td><table width="100%" border="0"> <tr> <td colspan="5">状態</td> </tr> <tr> <td width="16%">ゲート</td> <td width="30%"><?=$data['gate']?></td> <td>&nbsp;</td> <td width="16%">statue</td> <td width="30%"><?=$data['statue']?></td> </tr> </table></td> </tr> </table> DBから何件分もの表示をするにはDBのデータを連想配列にするのかなと思っているのですが いまいちどんな手法が良いのかわかりません。よろしければご教授くださいませ。

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

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

mysql_fetch_array http://us3.php.net/mysql_fetch_array この説明にある通り、一回処理するごとにデータポインタを前に進めるのでループ処理で件数分処理させることができます。 ですので単に全件出力するだけなら以下のようなコードを記述をすればよいでしょう。 echo "<table>"; echo "<tr>(省略)</tr>"; while( $data = mysql_fetch_array($rst) ){ (表内部のHTMLを出力する処理を記述); } echo "</table>"; 余談ですが、HTML中にPHPを埋め込むのは多くの場合、ソースの可読性を損なうので、できるだけPHPからネストせずにHTMLを出力するようにした方がよいでしょうし、それを手助けするクラスなどもいろいろあります。もちろん場合にもよるので絶対にいけないというわけではありませんが。

kaolu007
質問者

お礼

お答えいただき感謝します。 >一回処理するごとにデータポインタを前に進めるのでループ処理で件数分処理させることができます 単純にhtmlタグもPHPで出力させるように書き、その表示をループさせるだけでデータの方は同じデータの繰り返しにならず全データが表示できるという事でしょうか?

その他の回答 (1)

  • splwtr
  • ベストアンサー率16% (75/461)
回答No.1

登録データ一覧をページ単位で表示したい!と言うことなら 出力するページに何ページ目を表示しているかの表示情報(*1)を 埋め込んであげて、前ページ、次ページなどのボタンがあったと すると、そこから計算して求めることができます。 (*1): 出力する一覧に以下の表示しているページ情報を入れておく。 <input type="hidden" name="page" value="1"> 最近、Web関係のことしてないので、古典的なやりかたかも。 この場合、昇順な登録番号を付けてた方が、楽かもしれないです。

kaolu007
質問者

お礼

ありがとうございます その方法で10件ごとに1ページみたいな表示ができそうですね。 まずは1つのページで複数件の表示をさせることに成功したらやってみようと思います。