• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでのページング処理についての質問です。)

PHPでのページング処理についての質問

このQ&Aのポイント
  • PHPでのページング処理についての質問です。ドットインストールにてページングの勉強をしています。
  • 件数が多いと、この場合ですと10ページ以上まで表示されてしまうかと思うのですが、よくあるWEBサービスのように10ページまでで区切り、10ページ目をクリックすると、5ページから15ページまでを表示させたいのですが、どのように書いていくものでしょうか?
  • <?php define('DB_HOST', 'localhost'); define('DB_USER', 'dbuser'); define('DB_PASSWORD', '********'); define('DB_NAME', 'dotinstall_paging_php'); define('COMMENTS_PER_PAGE', 5); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } error_reporting(E_ALL & ~E_NOTICE); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } $offset = COMMENTS_PER_PAGE * ($page - 1); $sql = "select * from comments limit ".$offset.",".COMMENTS_PER_PAGE; $comments = array(); foreach ($dbh->query($sql) as $row) { array_push($comments, $row); } $total = $dbh->query("select count(*) from comments")->fetchColumn(); $totalPages = ceil($total / COMMENTS_PER_PAGE); $from = $offset + 1; $to = ($offset + COMMENTS_PER_PAGE) < $total ? ($offset + COMMENTS_PER_PAGE) : $total; ?>

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

mysqlを利用したページングであれば SQL文でLIMITを利用してページ当たりのデータ数を調整すればいいでしょう。 必要な情報は以下があれば過不足ないでしょう ・カレントページ(1ページ目から数える) =$currentPage ・1ページ当たりのデータ数 =$perPage ・全データ数 =$totalItems (場合によってはメニューに表示する上限数もあってもよいかも) 現在のページを表示するなら SELECT * FROM db LIMIT ($currentPage -1)*$perPage,$perPage; でよいでしょう。 ceil($totalItems/$perPage)だけページ数が発生するので 各ページのメニューをつくってgetでデータ渡ししてやればよいでしょう 面倒であればなにか適当なページャーを利用してみてください (PEARなどにも用意されています。)

shousen412
質問者

お礼

大変勉強になりました、ありがとうございます!!

関連するQ&A