- ベストアンサー
「次の10件を表示する」のような表示がしたい
住所録を表示するページをPHPで作成しました。 問題なくできたのですが、データが増えたので一度に表示するのは例えば20件とかにして、「次の20件」のようなボタンをおすと、 21件~40件を表示させ、そのページには、 「前の20件」と「次の20件」のボタンを表示させたいと考えています。 最初のページには、「前の20件」ボタンはなく、 最後のページには、「次の20件」ボタンは表示させないように考えています。 どのようにすればよろしいでしょうか。 ご教授ください。 ************************************************ 作成したPHP ************************************************ <?php print("<table>"); $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('DB名', $cont); $sql = "select * from テーブル名 $rc = mssql_query($sql,$cont); while ($array = mssql_fetch_array($rc)) { print("<tr>"); print("<td>"); print "".$array["氏名"].""; print("</td>"); print("<td>"); print "".$array["住所"].""; print("</td>"); print("</tr>"); } print("</table>"); mssql_close($cont); ?> ************************************************ 環境 PHP5.2 Apache2.2 SQLserverVersion5 PHPとSQLは別サーバになります。 両サーバOS:windows
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
どうも。先ほどの質問と似た答えになります。 http://okwave.jp/qa3271273.html hoge.php?p=1 hoge.php?p=2 hoge.php?p=3 ... のように表示するページ番号を指定する方法、 hoge.php?p=1 hoge.php?p=21 hoge.php?p=41 ... のように表示を開始する項目の番号を指定する方法をよく見かけます。 例えば2ページ目で <a href="hoge.php?p=1">前の20件</a> <a href="hoge.php?p=41">次の20件</a> のようなリンクを作って、 引数pの値をPHP側で受け取ってそれに応じて表示する内容を変えるわけです。 引数の処理の話は説明の都合上向こうの質問で説明した方がよさそうなので、向こうでしますね。
その他の回答 (4)
- shirayukix
- ベストアンサー率43% (90/207)
$_GET['p']で値を受け取ってるんですから、 "<a href=\"test.php?p=" . ($_GET['p'] + 10) . "\">next</a>" のように10足したのを書くだけですよ。 再帰の意味は分かりますか? 再帰ではないです。
- swqamy
- ベストアンサー率37% (11/29)
返信が遅くなったこととPGにミスがあってすみません。 わたしの間違いでした。 (1)$sql = "select * from テーブル名 where id = ".$page." AND id <= ".$endData; ではなく (1)$sql = "select * from テーブル名 where id = ".$startData ." AND id <= ".$endData; です。 また、「next」を押して次の10件を表示させたいのなら 再帰プログラムだと思うので <a href="test.php?p=11">next</a> にして、 if($startData!=""){ $sql = "select * from テーブル名 where id = ".$startData ." AND id <= ".$endData; }else{ $sql = "select * from テーブル名 where id <= 10 "; } ではどうですか >(2)のコードで実行すると、idが「19」までのデータが表示され、「next」を押しても、同じ「19」までのデータが表示されます。 「next」を押したときは「10」を受け取っているのでわかりますが、最初に表示したときにも19件表示されるのですか
お礼
回答ありがとうございます。 >$sql = "select * from テーブル名 where id >= ".$startData ." AND id <= ".$endData; に変更したら、 p=10のとき、idが10から19までの表示ができました。 再帰プログラムのところがよくわかりません。 現在は↓のように、 <a href=test.php?p=10>next</a> と、pが10と固定してありますが、 10から19までのデータが表示されたページでさらに 「next」を押すと、20から29まで表示されるようにしたいです。 これはどうしたらいいのでしょうか。 また一番最初のトップぺージはpの値がないため、 エラーメッセージが出てデータが表示されません。 そのページで「next」を押すと、10から19まで表示されます。 聞いてばかりですが、宜しくお願い致します。
- swqamy
- ベストアンサー率37% (11/29)
まずデバッグしてみてください デバッグ項目は ・23行目付近でおかしな点はないか(";"とか抜けてないですか?) ・「print $_GET['p'];」で値が受け取れているかを確認してください です。 これでもエラーが見つからない場合、1~22行目のソースとどのようにサンプルPGを組み込んでいるのか教えて下さい また、意味についてですが、「$_GET['p']」というのは 「hoge.php?p=1」というアドレスでページを表示させる場合 「GETで送信されてきた"P"という名前の値を取得」という意味です。 複数の値を送信させたい場合は「hoge.php?p=1&c=1」というように"&"で連結して記述します。 受け取り方は $_GET['p']と$_GET['c']で受け取ります。 >こちらの「件数」ですが、10件表示したい場合、「件数」のところに「10」と入力すればよかったでしょうか。 すみません説明が悪かったようです。 例のように「$endData = $startData + 20-1」 ↑この部分を「10」に変えれば出来ると思います。 $endDataには表示させたい件数が格納されればよいので、 「$startData」には「1,11,21・・・」といった感じで値が格納される(のですよね?)ので 格納する値は「$startData + 表示させたい件数 - 1」となるわけです。
お礼
回答ありがとうございます。 ファイルを修正しましたが、エラーになってしまいます。 現状は以下のようになっております。 宜しくお願い致します。 (2)のコードで実行すると、idが「19」までのデータが表示され、「next」を押しても、同じ「19」までのデータが表示されます。 (idは「1,2,3,4,…」のように1づつ増えるフィールドになります。) (1)のコードで実行すると以下のエラーメッセージが表示されます。 32行目は(1)のコードの行になります。 ***エラーメッセージ*** Notice: Undefined variable: page in C:\Program Files\Apache ….php on line 32 「.$page.」の値はどこからとってきたらいいのでしょうか。 **************************************** 作成したtest.phpのコード **************************************** <body> <a href="test.php?p=10">next</a> <?php $startData = $_GET['p'];//GET送信された件数の値を取得 $endData = $startData + 10-1; //例 $endData = $startData + 20-1;$startDataには「1」が格納されていると仮定 $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('[DB名]', $cont); (1)$sql = "select * from テーブル名 where id = ".$page." AND id <= ".$endData; (2)"select * from テーブル名 where id <= ".$endData; $rc = mssql_query($sql,$cont); ?> <table> <?php do{ while ($array = mssql_fetch_array($rc)) { print("<tr>"); print("<td>"); print $array["氏名"]; print("</td>"); print("<td>"); print $array["住所"]; print("</td>"); print("</tr>"); } }while (mssql_next_result($rc));//次のデータの読み込み mssql_close($cont); ?> </table> </body> </html> **************************
- swqamy
- ベストアンサー率37% (11/29)
<?php $startData = $_GET['p'];//GET送信された件数の値を取得 $endData = $startData + 表示させたい数-1; //例 $endData = $startData + 20-1;$startDataには「1」が格納されていると仮定 $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('DB名', $cont); $sql = "select * from テーブル名 where 件数 = ".$page." AND 件数 <= ".$endData; $rc = mssql_query($sql,$cont); ?> 省略 <table> <?php do{ while ($array = mssql_fetch_array($rc)) { print("<tr>"); print("<td>"); print $array["氏名"]; print("</td>"); print("<td>"); print $array["住所"]; print("</td>"); print("</tr>"); } }while (mssql_next_result($rc));//次のデータの読み込み mssql_close($cont); ?> </table> 書き方を少し変えましたがこんな感じで出来ると思います。 試していないのでおそらくとしか言えませんが・・・
お礼
回答ありがとうございます。 早速実行しましたが、以下のエラーが出ました。 Parse error: syntax error, unexpected '@' in C:\Program Files\Apache…test.php on line 23 (23行目は→「$startData = $_GET['p'];//GET送信された件数の値を取得」になります。) $_GET['p']のところがよくわかっていません。 pは値はどこを見にいってるのえしょうか。 こちらで指定してやるのでしょうか。 >$sql = "select * from テーブル名 where 件数 = ".$page." AND 件数 <= ".$endData; こちらの「件数」ですが、10件表示したい場合、「件数」のところに「10」と入力すればよかったでしょうか。 聞いてばかりで申しわけありませんが、 よろしければご教授ください。 宜しくお願い致します。
お礼
回答ありがとうございます。 勉強になります。 HTML側で、↓のような記述を書くのは理解できました。 <a href="hoge.php?p=1">前の20件</a> <a href="hoge.php?p=41">次の20件</a> PHP側?で1ページ目の場合、1~20件だけ表示させ、 2ページ目では、21件から40件まで 表示させる方法がわかりません。 SQLではなく、PHPで作るのかなくらいしかイメージできません。 これはどのようにしたらよいのでしょうか。 たくさん聞いてまって申し訳ありません。 宜しくお願い致します。