- ベストアンサー
PHPとMYSQLを使用してデータを表示する方法
- PHPとMYSQLを使用してデータをデータベースから10件ずつ表示し、次の10件を表示する方法について教えてください。
- データベースから指定条件のデータを抽出し、ページネーションを実装する方法について教えてください。
- PHPとMYSQLを使用してデータの抽出とページネーション機能を実装する方法についてご教授お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちょっとどこで使用したいのかわからないのですが・・・ ======= 選択をするphp ======= ----- プルダウンA ----- 東京都 神奈川県 埼玉県 以下各都道府県名表示 ・Aから東京都を選択 ここで 【東京23区の数】件のデータ中 1件~10件 を表示しています を表示する ----- プルダウンB ----- 東京都足立区 東京都北区 東京都葛飾区 東京都荒川区 以下10件まで表示 Bから選択された値をtokyo.phpへPOST ============================= ======= tokyo.php ======= 23区情報を受け取って表示 ========================= 上記のように「~から~を表示しています」処理はプルダウンBに対してだけ行うということでいいのでしょうか? Bに対してだけなのであれば >2 件のデータ中 1件~2件の用に表示はされるのですが これが表示できていれば >【条件に一致したデータはありません】となります。 このようにelse側が選択されることはないはずなのですが。 それとも、 tokyo.phpへ23区をPOSTしたあとにtokyo.phpの中で足立区なら足立区の詳細を出力する際に「~から~を表示しています」を使用したいのでしょうか? SQL自体はおかしくないとは思うのですが、いずれにしても、 各変数をechoで画面にこまめに出力しながらデバッグしていく癖をつけたほうがいいかと思います。 SQLにおいても同様です。 mysql_queryする前にechoしてみて変数に正しい値がきちんと入っていて、自分が投げたいSQL文として成り立っているかなどを確認することが大事だと思います。
その他の回答 (2)
- gogo-tea
- ベストアンサー率75% (25/33)
自分のサイトで使用しているロジックです。 内容をかなりはぶいたり、出力部分をechoに変えたりしたのでそのまま動くかはわかりませんが、流れはつかんでもらえるかと思います。 ※自己流なので、このやり方がベストかどうかはわかりかねます。。 <?php //offsetが空又は不正な文字列なら初期化 if(isset($_GET['offset'])){ $offset = $_GET['offset']; $offset = (!$offset or !is_numeric($offset) or $offset<0)?0:(int)$offset; } else{ $offset = 0; } //1ページに表示する件数 $page1 = 10; /* DB接続・選択処理を書いてください */ //SQL処理 $sql_nolimit = "select colname from hogetbl where hoge = 'hogehoge' order by colname;"; $sql_limit = "select colname from hogetbl where hoge = 'hogehoge' order by colname limit ".$offset.",".$page1.";"; $rs_nolimit = mysql_query($sql_nolimit) or die("quary faild sql_nolimit"); $rs_limit = mysql_query($sql_limit) or die("quary faild sql_limit"); $maxrows_nolimit = mysql_num_rows($rs_nolimit); $maxrows_limit = mysql_num_rows($rs_limit); //総ページ数 $pagesuu = ceil($maxrows_nolimit / $page1); //「~から~を表示しています」の先頭と末尾の数字 $startno = $offset + 1; if(($offset+$page1) < $maxrows_nolimit){ $endno = $offset + $page1; } else{ $endno = $maxrows_nolimit; } //検索結果が0件なら if($maxrows_nolimit == 0){ echo '条件に一致したデータはありません<br>'; } //1件以上あれば else{ echo $maxrows_nolimit.' 件のデータ中 '.$startno.'件~'.$endno.'件 を表示しています<br>'; } //リンクと「前へ」「次へ」を生成 //最後のページ if(($offset > 0) and ($maxrows_nolimit <= ($offset + $page1))){ $previous = "thisfile.php?offset=" . ($offset - $page1) . "&page1=" . $page1; echo '<a href="'.$previous.'"> 前へ </a><br>'; } //最初のページ elseif(($offset <= 0) and ($maxrows_nolimit > ($offset + $page1))){ $next = "thisfile.php?offset=" . ($offset + $page1) . "&page1=" . $page1; echo '<a href="'.$next.'"> 次へ </a><br>'; } //最初<ページ<最後 elseif(($offset > 0) and ($maxrows_nolimit > ($offset + $page1))){ $previous = "thisfile.php?offset=" . ($offset - $page1) . "&page1=" . $page1; $next = "thisfile.php?offset=" . ($offset + $page1) . "&page1=" . $page1; echo '<a href="'.$previous.'"> 前へ </a> <a href="'.$next.'"> 次へ </a><br>'; } //データ表示 while($rec = mysql_fetch_array($rs_limit)){ echo $rec['colname']."<br>"; } ?>
お礼
gogo_tea様 またご回答して頂きどうもありがとうございます。 以前ご回答して頂きました時もgogo_tea様のおかげで無事に解決でき 勉強にもなりました。 今回につきましてもさっそく試させて頂きます!
補足
さっそくこちらで色々と試してみたのですが、 2 件のデータ中 1件~2件の用に表示はされるのですが 住所の例えば一つ目のプルダウンメニューで【東京都】なら東京都の一覧が表示され、 その中から「更に詳しく」というプルダウンがあり、23区情報を出力して10件毎表示をしたいと考えているのです検索してもデータがあるにも 【条件に一致したデータはありません】となります。 きっと私の$sql文が間違っていると思うのですが そこで一つお伺いしたいのですが私が変更したのは $sql_nolimit = "select add1 from woo where add1 = '$fld' order by add1;"; $sql_limit = "select add1 from woo where add1 = '$fld' order by add1 limit ".$offset.",".$page1.";"; $fld に add1がはいっており、こちらのadd1を出力し、その検索結果を毎回10件表示にしたいのですが、$sql文はあっていると思いますか?
- asuncion
- ベストアンサー率33% (2127/6289)
PEAR::Pagerを使うと、ご希望がある程度かなうのではないかと思います。 ご希望と厳密に一致するかどうかはわかりません。
お礼
ご教授していただきましたおかげで無事にこちらの仕様に合わせた感じに仕上げることが出来ました!本当に色々とありがとうございます。 スクリプトなどを拝見していたのですが、書き方など大変勉強になりました。 自分も早くあのようにかけるようになりたいと意欲が沸きました。 まだ全体の中からみますと作り途中なのですが、また機会がありましたら 是非宜しくお願いいたします。 どうもありがとうございました!