• ベストアンサー

【php+mysql】mysqlのレコードが100件あるとして、それを10件ずつページを分けて表示するには?

たとえばmysqlのレコードが100件あるとして、 それを10件ずつページを分けてphpを使ってページに表示するには どうすればいいのでしょうか? googleの検索結果表示のようなかんじです。

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

100件程度ならば配列に全データを入れてforeachで回す。とか。 普通にLimitを使ったほうが簡単でしょうけど。 以下サンプル。適当に作ったから動かないかも。 $p = $_GET['p']; $p_start = $p*10; # 表示スタート $p_end = $p_start+10; # 表示終了 $next_p = $p++; # 次のページ $back_p = $p--; # 前のページ $i=0; $all_data_count = ceil(count($data)/10); foreach ($data as $d) { if ($p_start <= $i and $i < $p_end) { print $d; } } if ($back_p >= 0) { print "<a href=\"${cgi}?p=$back_p\">次へ</a>"; } if ($next_p <= $all_data_count) { print "<a href=\"${cgi}?p=$next_p\">次へ</a>"; }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

全てのレコード表示は $sql = "SELECT * FROM tablename"; として、それを10件だけセレクトすると言う場合は $sql = "SELECT * FROM tablename LIMIT 0,10"; となります。LIMITで取得数を制限出来ます(0件目から10件を取得)。 次の10件、と言う場合は $sql = "SELECT * FROM tablename LIMIT 10,10"; さらに次の20件と言う場合は $sql = "SELECT * FROM tablename LIMIT 20,10"; ....... となります。 これをリンクに反映させれば良いです。 例えば <a href="/?a=0">最初</a> <a href="/?a=10">10</a> <a href="/?a=20">20</a> ...... と言う感じです。 変数をGETで渡す場合はSQLインジェクション対策を忘れずに。 参考まで。

kimidora
質問者

お礼

ありがとうございました☆ 細かな書き込みで、大変わかりやすいです(*^-^) 今後も精進して初心者を早く脱出したいです。 SQLインジェクション対策についても、調べます。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

MySQLでLimitをつけてデータをわたせばよいでしょう。 PHPのページの過去ログで「mysql limit」とかで検索してみてください

kimidora
質問者

お礼

ありがとうございました☆ おっしゃったとおり調べてみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPとMySQLによるデータ検索サイトを作ってます

    index.html(検索フォーム) list.php(検索結果表示ページ) 上記2ファイルでPHPとMySQLによるデータ検索サイトを作ってます。 初心者のため、勉強用に作ってます。 pearというライブラリを使用しないで以下の表現をするためにはどのようなコーディングが必要でしょうか? 参考になるサイトなどあればご教授ください。 PHPの上級者が見るようなマニュアルサイトだとその説明すら解読できない可能性があるので、噛み砕かれたサイトを探してます。 [知りたいこと] セレクト文で引っ張ってきたレコード数が25件として 検索結果表示ページには10件ごとに改ページさせたいです。 ↓このような改ページリンクを作りたいです。 [< 1 2 3 >] ↓またはこのようなリンクでもご教授いただけたら幸いです [前ページ│次ページ]

    • ベストアンサー
    • PHP
  • MYSQLのレコードの数を表示したいのですが。

    PHPとMySQLでPHPからSQL文を送って、PHPにMySQLにレコード数を表示したいのですが、Resource id #3 といったようになってしまいます。 一瞬表示されたと思っていたのですが、実際のレコードの数と違ったのでやはり失敗でした。 どのような方法で表示すれば上手く表示されるでしょうか。初歩的なことで申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP + MySQL (さくらサーバ)

    お世話になります。さくらサーバでレンタルサーバを借りています。 とあるMySQLに対してPHPでSelectを発行しているのですが、何が原因かわかりませんが、たまに結果が途中のもので返ってきます。 たとえばレコードが1000件あった場合、50件とかしか戻ってこない場合があります。時間を少しおいたら100件、200件と少しずつ検索時の結果件数が増えて最後には1000件出ます。 しかしまた時間がたった後には検索結果が少なくなったりします。 タイムアウトの場合はエラー表示されるかと思うのですが、何か考えられる原因はあるでしょうか?

    • 締切済み
    • PHP
  • XAMPPのMySQLで削除済みレコードが表示される

    XAMPPのMySQLで削除済みレコードが表示される XAMPP1.7.3をWinXP Proにて運用しています。 PHPにてselectのSQLを実行したところ、削除済みのレコードが表示されるため困っています。 これまでの経緯は 1.phpMyAdminにてDBとテーブルを作成し、サンプルデータを4件登録 2.PHPからselectで条件なしで全レコードが表示されるのを確認 3.条件をつけてselectし、それぞれの条件にマッチしたレコードが表示されるのを確認 4.phpMyAdminにて1レコードを削除 5.条件をつけてselectし、削除したレコードが表示されるのを発見 6.phpMyAdminのSQLで同じ条件のSQLを実行し、削除レコードが表示されないのを確認 7.PHP側のselect後にDBCloseをしているかの確認 8.phpMyAdminにてテーブルの修復、最適化などを実行 9.MySQLの再起動 以上の操作をしてみましたが、やはりPHPからのSQLの結果に削除されたレコードが表示されてしまいます。 色々なサイトで同じような現象のTipsがないか探しましたが、見つけきれず質問させていただきます。 同じような現象に対しての対応を紹介したサイトや、対処方法をご教授下さい。 よろしくお願いします。

  • MySQLのLimit句によるページ分割について

    MySQL初級です。 PHP+MySQLで、検索ページを作成しています。 SELECT部を簡略して書くと・・ (ページ番号$get_pageNoをGETで渡して、10件ずつ検索結果を表示したい。) $sql = "SELECT Id FROM houjin WHERE (word LIKE '%${ワード}%')"; $sqlLimit .= "ORDER BY Id ASC limit " . ($get_pageNo*10) . ", 10"; 表示まではできていて、前へ、次へ、のリンクで、10件ずつ抽出できるところまでは、 できました。 さらに、抽出されたレコードに、チェックボックスをつけて、 ユーザーに選択させて、処理(削除など)を行いたいわけです。 表示されたあるレコードにチェックをつけて、 次のページのレコードにもチェックをつけて、 一括処理(削除など)ができる方法を探しています。 ページ番号をGETで渡してリロードさせているので、 チェックされたレコード番号もGETで渡す、しか方法はないでしょうか? Limitにこだわってはいません。 よい方法、アイデアがあれば教えてください。

    • ベストアンサー
    • PHP
  • PHP+MySQLで検索ページを作りたい

    こんにちわ。 全くの素人ですが質問させてください。 私は今、PHPとMySQLを使って論文の検索ページを作りたいと考えているのですが、どうにも分りません。 ページの概要としては、条件を入力して、検索するとそれに見合ったものが出てくるようにする。また、その論文のタイトルをクリックすると論文がPDF形式で保存してあるのですがそれを表示させるようにしたいと思っています。 ApacheとPHPとMySQL間の設定方法がわかりませ。 PDFファイルの扱いもいまいちわかりません。 OSはFedoraCore6を使用しています。 作り方の参考になるようなページなども紹介していただけるとうれしいです。よろしくお願いします

    • 締切済み
    • PHP
  • mysql>PHPにデータ表示、10件ごとにページ分割

    はじめまして、PHP勉強中の初心者です。。 MYSQLから取り出したデータを件数でページ分割したいのですが、 うまくきません。。 環境:eclipse3.5、mysql5.0、php5.0、xampp (phpで、sql接続、select * from でデータは表示は確認できてます)。。 ソースは↓です。。(初心者なもので不備がればすみません)。。 eclipse上では if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。 どなたかご存知の方いましたら、教えていただけないでしょうか? <!--kensaku.html--> <html> <body> <form action ="kensaku.php" method="post">    名前:<input type="text" name="nm">    年齢:<input type="hidden" name="page_num" value="0">    <input type="submit" name="exec" value="検索"> </form> </body> </html> //kensaku.php ソース <html> <body> <? $nm=$_POST['nm']; $page_num=$_POST['page_num']; //データベースに接続 if (!$conn =mysql_connect("","user","PASS")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("table", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select id,name from table " ; $sql.= "where name like '%$nm% ' order by id " ; $sql.="limit" . $page_num * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr><td>id</td><td>name</td></tr>" ; while($row = mysql_fetch_array($res)){ echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //検索条件に該当する全データの件数取得 $sql = "select count(*) from member " ; $sql.="where name like '% $nm % ' order by id " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>"; //前の10件 if ($page_num !=0) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num -1..">"; echo "&lt 前の10件"; } //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 if (($page_num+1)*10<$cnt) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num +1..">"; echo " 次の10件 &g</a>t"; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> すみませんが、ご存知の方いましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQLの繰り返し処理で…

    PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

    • ベストアンサー
    • PHP
  • MYSQL→PHP→10件表示

    現在phpを勉強しているのですがどうしても分からないことがあり、 質問をさせて頂きました。 PHPとMYSQLを使い、プルダウンメニューから検索した結果を 10件表示をしていきたいのですが、どうしてもうまくいかず混乱しております。 どのなたかご存知の方、お伺いしても宜しいでしょうか? $PAGESIZE = 10; //ここにmysqlに接続するスクリプト extract($_REQUEST); if (!isset($page)) { $page = 1; } if(!empty($fld)) { //$fldに検索したい住所が入ってます。 $local = addslashes($fld); $where .= "add1 = '$fld' && "; } if(!empty($where)) { $where = substr($where, 0, -3); $where = "WHERE " . $where; } $sql = "select count(*) as cnt from ○○ ". $where; $rst = mysql_query($sql); $row = mysql_fetch_array($rst); $tcnt = $row["cnt"]; mysql_free_result($rst); $totalpage = ceil($tcnt / $PAGESIZE); $pagehead = "<B>$tcnt 件みつかりました。 " . "[" . ($PAGESIZE * ($page - 1) + 1) . "-"; if ($page < $totalpage) { $pagehead .= ($PAGESIZE * $page) . "] を表示</B>"; } else { $pagehead .= "$tcnt] を表示</B>"; } $sql = "select * from ○○ ". $where. " order by renban desc limit " . $PAGESIZE * ($page - 1) . ", $PAGESIZE"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>登録データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["renban"]; echo " "; echo $row["tourokubi"]; echo "<br />"; echo $row["people"]; echo " "; echo $row["add1"]; echo $row["add2"]; echo "-"; echo $row["sta"]; echo " "; echo $row["tel"]; echo $row["url"]; echo $row["sejitu"]; echo $row["pr"]; echo "</p><hr />"; } } ?> <?= $pagehead ?> <?php mysql_free_result($result); mysql_close; $param_local = rawurlencode($local); if ($page > 1) { $body .= "<A href = '$PHP_SELF?page=" . ($page - 1) . "&tcnt=$tcnt&local=". $param_local. $param_category. "'>" . "前の $PAGESIZE 件</A>"; } if ($totalpage > 1 and $page < $totalpage) { $body .= "<A href = '$PHP_SELF?page=" . ($page + 1) . "&tcnt=$tcnt&local=". $param_local. $param_category. "'>" . "次の $PAGESIZE 件</A>"; } ?> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHP+MYSQLでレコードの表示させ方

    いつも初心者の質問でスミマセン。 PHP MYSQL で 会員制ページを作っています。 このような時にはどういう風にしたらいいか教えてください。 1件のレコードに 名前 出身県 性別 がある時に 下記のようにその個人のページにリンクしたいのですが ひとつの県だけなら出来るのですが、 このように条件を色々と設定するにはどうしたらいいか ヒントだけでもお願いいたします。 沖縄県出身者 男 A B C 女 D E F 東京出身者 男 G H I 女 J K L このようにしていました。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mem where seibetu = 1 and area = 1 " ; $rst = mysql_query($sql, $con); $body1 .= ""; while($col = mysql_fetch_array($rst)) { $body1 .= "⇒" . "<A href='" . $col["id"] . "j.html'>" . $col["name"] . "</A>"; $body1 .= "<br>\n"; } mysql_free_result($rst); $con = mysql_close($con); ?> これでボディに<?= $body1 ?> を張っていました。 これを<?= $body2 ?> と繰り返したらいいのかと思い色々していましたが どうしてもうまくいきません。 宜しくお願いいたします。

    • ベストアンサー
    • PHP