dポイントプレゼントキャンペーン実施中!

こんにちは
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"></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></td>
<td width="16%">statue</td>
<td width="30%"><?=$data['statue']?></td>
</tr>
</table></td>
</tr>
</table>
DBから何件分もの表示をするにはDBのデータを連想配列にするのかなと思っているのですが
いまいちどんな手法が良いのかわかりません。よろしければご教授くださいませ。

A 回答 (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を出力するようにした方がよいでしょうし、それを手助けするクラスなどもいろいろあります。もちろん場合にもよるので絶対にいけないというわけではありませんが。
    • good
    • 0
この回答へのお礼

お答えいただき感謝します。

>一回処理するごとにデータポインタを前に進めるのでループ処理で件数分処理させることができます

単純にhtmlタグもPHPで出力させるように書き、その表示をループさせるだけでデータの方は同じデータの繰り返しにならず全データが表示できるという事でしょうか?

お礼日時:2008/09/22 14:19

登録データ一覧をページ単位で表示したい!と言うことなら


出力するページに何ページ目を表示しているかの表示情報(*1)を
埋め込んであげて、前ページ、次ページなどのボタンがあったと
すると、そこから計算して求めることができます。

(*1): 出力する一覧に以下の表示しているページ情報を入れておく。
<input type="hidden" name="page" value="1">

最近、Web関係のことしてないので、古典的なやりかたかも。

この場合、昇順な登録番号を付けてた方が、楽かもしれないです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/22 14:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!