PHPでページング表示を作成する方法

WBOY
リリース: 2016-07-25 09:03:45
オリジナル
2677 人が閲覧しました
  1. //データベース接続を確立します

  2. $link = mysql_connect("localhost", "mysql_user", "mysql_passWord")
  3. or die("接続できませんでした: " . mysql_error ());

  4. // 現在のページ番号を取得します

  5. if( isset($_GET['page']) ){
  6. $page = intval( $_GET['page'] ) ;
  7. }
  8. else{
  9. $page = 1;
  10. }

  11. // 1 ページあたりのページ数

  12. $PageSize = 10;

  13. //データの合計量

  14. $sql = "テーブルから量として count(*) を選択";
  15. $result = mysql_query($sql);
  16. $row = mysql_fetch_row($result);
  17. $amount = $row['amount '];< /p>
  18. // 合計ページ数を計算します

  19. if( $amount ){
  20. if( $amount < $page_size ){ $page_count = 1;総データ量が $PageSize 未満の場合、ページは 1 つだけです
  21. if( $amount % $page_size ){ //総データ量をページ数で割った余りを求めます
  22. $page_count = (int)( $amount / $page_size) + 1; //余りがある場合、ページ数は合計データ量を各ページの数で割って切り上げて 1 を加えたものになります
  23. }else{
  24. $page_count = $amount / $page_size; //余りがない場合、ページ数は総データ量を各ページで割った結果になります
  25. }
  26. }
  27. else{
  28. $page_count = 0;
  29. }< /p>
  30. // ページめくりリンク

  31. $page_string = '';
  32. if( $page == 1 ){
  33. $page_string .= '最初のページ|前のページ|';
  34. }
  35. else{
  36. $page_string .= '最初のページ|前のページ|' ;
  37. }

  38. if( ($page == $page_count) | | ($page_count == 0) ){

  39. $page_string .= '次のページ|最後のページ';
  40. }
  41. else{
  42. $page_string .= '次のページ|';
  43. }

  44. if( $amount ){
  45. $sql = "select * from ID によるテーブルの順序 説明制限 ". ($page-1)*$page_size .", $page_size ";
  46. $result = mysql_query($sql);
  47. while ( $row = mysql_fetch_row($result) ){
  48. $rowset [] = $row;
  49. }
  50. }else{
  51. $rowset = array();
  52. }
  53. // 結果を表示するコードはないため、foreach を使用する限りは説明の範囲外です。 , 取得した二次元配列で簡単に結果を表示できます
  54. ?>

コードをコピーしてください

4. OOスタイルコード 次のコードのデータベース接続は、pear db クラスを使用して処理されます。

  1. // FileName: Pager.class.php

  2. // ページングクラス、このクラスはデータ構造を処理するためにのみ使用され、表示作業の処理には関与しません
  3. クラスPager
  4. {
  5. var $PageSize; // 各ページの番号
  6. var $NextPageID; // 次のページ
  7. var $PreviousPageID; // 合計ページ数
  8. var $numItems; //レコードの総数
  9. var $isFirstPage; //それが最後のページかどうか
  10. var $sql; ;/p>
  11. function Pager($option)

  12. {
  13. global $db;
  14. $this->_setOptions($option);

  15. // アイテムの総数

  16. if ( !isset ($this->numItems) )
  17. {
  18. $res = $db->query($this->>sql);
  19. $this->numItems = $res->numRows( );
  20. }< ;/p>
  21. //総ページ数

  22. if ( $this->numItems > 0 )
  23. {
  24. if ( $this->numItems < $this-> ;PageSize ){ $this ->numPages = 1; }
  25. if ( $this->numItems % $this->PageSize )
  26. {
  27. $this->numPages= (int)($this-> numItems / $this->gt;PageSize) + 1;
  28. }
  29. else
  30. {
  31. $this->numPages = $this->numItems / $this->PageSize;
  32. }
  33. }
  34. else
  35. {
  36. $ this->numPages = 0;
  37. }

  38. switch ( $this->CurrentPageID )

  39. {
  40. case $this->numPages == 1:
  41. $this->isFirstPage = true;
  42. $this ->isLastPage = true;
  43. break;

  44. ケース 1:

  45. $this->isFirstPage = true;
  46. $this->isLastPage = false;
  47. Break;
  48. case $this->numPages:

  49. $this->isFirstPage = false;
  50. $this->isLastPage = true;
  51. break;

  52. < ;p>default:
  53. $this->isFirstPage = false;
  54. $this->isLastPage = false;
  55. }

  56. if ( $this->numPages > 1 )

  57. {
  58. if ( !$ this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
  59. if ( !$this->isFirstPage ) { $this->PreviousPageID = $ this->CurrentPageID - 1; }
  60. }
  61. return true;
  62. }

  63. /***

  64. *
  65. * 結果セットのデータベース接続を返します
  66. * 結果セットが比較的大きい場合、このメソッドを直接使用してデータベース接続を取得し、クラスの外をトラバースできるため、オーバーヘッドが小さくなります
  67. *結果セットはそれほど大きくないため、getPageData を直接使用して 2 次元配列形式で結果を取得できます
  68. * getPageData メソッドもこのメソッドを呼び出して結果を取得します
  69. *
  70. ***/
  71. function getDataLink()
  72. {
  73. if ( $this-> numItems )
  74. {
  75. global $db;
  76. $PageID = $this->現在のページID;
  77. $from = ($PageID - 1)*$this->ページサイズ;
  78. $count = $this->ページサイズ;
  79. $link = $db- >limitQuery($this->sql, $from, $count); //Pear DB::limitQuery メソッドを使用してデータベースの互換性を確保します
  80. return $link;
  81. }
  82. else
  83. {
  84. return false;
  85. }
  86. }

  87. /***

  88. *
  89. * 結果セットを 2 次元配列の形式で返します
  90. *
  91. ***/
  92. function getPageData()
  93. {
  94. if ( $this->numItems )
  95. {
  96. if ( $res = $ this->getDataLink( ) )
  97. {
  98. if ( $res->numRows() )
  99. {
  100. while ( $row = $res->fetchRow() )
  101. {
  102. $result[] = $row;
  103. }
  104. }
  105. else
  106. {
  107. $result = array();
  108. }
  109. return $result;
  110. }
  111. else
  112. {
  113. return false;
  114. }
  115. }
  116. else
  117. {
  118. return false;
  119. }
  120. }< ;/p>
  121. < ;p>function _setOptions($option)
  122. {
  123. $allow_options = array(
  124. 'PageSize',
  125. 'CurrentPageID',
  126. 'sql',
  127. 'numItems'
  128. );

  129. foreach ( $option as $key => $value )

  130. {
  131. if ( in_array($key, $allow_options) && ($value != null) )
  132. {
  133. $this->$key = $value;
  134. }
  135. }
  136. return true;
  137. }
  138. }
  139. ?>

  140. コードをコピー

#--------------------------

手順: データ処理と結果表示を 1 つのクラスにまとめるのは少し抵抗があると思うので、このクラスはデータを処理するだけで表示は担当しません。表示するときは、状況や要件が変更される可能性があるため、Pager クラスを基にして独自のサブクラスを継承して別のページネーションを表示することをお勧めします。ユーザーのページネーション リストを表示します。

  1. class MemberPager extends Pager

  2. {
  3. function showMemberList()
  4. {
  5. global $db;
  6. $data = $this->getPageData();
  7. //結果を表示するコード
  8. // ......
  9. }
  10. }

  11. ///

  12. if ( isset($_GET['page']) ) を呼び出す
  13. {
  14. $page = (int)$_GET['page'];
  15. }
  16. else
  17. {
  18. $page = 1;
  19. }

  20. $sql = "ID 順のメンバーから * を選択";

  21. $pager_option = array(
  22. "sql" => $sql,
  23. "PageSize" => 10,
  24. "CurrentPageID" => $page
  25. );

  26. if ( isset( $_GET['numItems']) )

  27. {
  28. $pager_option['numItems'] = (int)$_GET['numItems'];
  29. }
  30. $pager = @new MemberPager($pager_option);
  31. $pager-> ;showMemberList();
  32. ?>

コードをコピー

説明する必要がある 2 番目の点は、異なるデータベースの互換性です。異なるデータベースでは結果を書き込む方法が異なります。の。 mysql: テーブル制限オフセット、行から * を選択します pgsql: select * from tablelimit m offset n ...

そのため、クラス内の結果を取得したい場合は、pear dbクラスのlimitQueryメソッドを使用する必要があります。



ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート