PHP 페이징 원리 및 페이지 점프 예제

WBOY
풀어 주다: 2016-07-25 08:52:46
원래의
1501명이 탐색했습니다.
  1. select * from table 제한 0,10 // 처음 10개 레코드
  2. select * from table 제한 10,10 // 11~20번째 레코드
  3. select * from tablelimit 20,10 // 레코드 21~30
  4. ...
코드 복사

이 SQL 문 세트는 실제로 , $pagesize=10일 때 테이블의 각 페이지 데이터를 가져오는 것은 sql 문입니다. 이러한 템플릿을 요약할 수 있습니다. 테이블 제한에서 * 선택($currentpageid - 1) * $pagesize, $pagesize 이 템플릿을 사용하여 해당 값을 대체하고 위의 SQL 문 집합과 비교하여 이것이 사실인지 확인하세요. 데이터를 얻는 방법에 대한 가장 중요한 문제를 해결한 후에 남은 것은 매개변수를 전달하고 적절한 SQL 문을 구성한 다음 PHP를 사용하여 데이터베이스에서 데이터를 가져와 표시하는 것입니다.

php 페이징 코드:

  1. // 데이터베이스 연결 설정
  2. $link = mysql_connect("localhost", "mysql_user", "mysql_password")
  3. 또는 die("연결할 수 없습니다: " . mysql_error())
  4. // 현재 페이지 번호를 가져옵니다
  5. if( isset($_get['page']) ){
  6. $page = intval( $_get['page'] );
  7. }
  8. else{
  9. $page = 1
  10. }
  11. //페이지당 페이지 수
  12. $pagesize = 10 ;
  13. //전체 데이터 양 가져오기
  14. $sql = "테이블에서 개수(*)를 선택"
  15. $result = mysql_query($sql);$row = mysql_fetch_row( $result);
  16. $amount = $row['amount'];
  17. // 총 페이지 수 계산
  18. if( $amount ){
  19. if( $amount < $page_size ) { $page_count = 1 ; } //총 데이터량이 $pagesize보다 작으면 한 페이지만 남습니다
  20. if( $amount % $page_size ){ //총 데이터량을 $pagesize로 나눈 나머지를 구합니다. 페이지 수
  21. $page_count = (int) ($amount / $page_size) 1; //나머지가 있으면 페이지 수는 전체 데이터 양을 페이지 수로 나눈 값과 같습니다. +1
  22. }else{
  23. $page_count = $amount / $ page_size;//나머지가 없으면 페이지 수는 전체 데이터 양을 페이지 수로 나눈 값과 같습니다
  24. }
  25. }
  26. else{
  27. $page_count = 0;
  28. }
  29. // 페이지 넘김 링크
  30. $page_string = ''
  31. if( $page = = 1 ){
  32. $page_string .= '첫 번째 페이지|이전 페이지|'
  33. }
  34. else{
  35. $page_string .= '|이전 페이지|'
  36. }
  37. if( $page == $page_count) || ($page_count == 0) ){
  38. $page_string .= '다음 페이지|마지막 페이지'
  39. }
  40. else{
  41. $page_string .= ' 다음 페이지|마지막 페이지< ;/a>';
  42. }
  43. // 데이터를 가져오고 2차원 배열 형식으로 결과를 반환합니다.
  44. if( $amount ){
  45. $sql = "id별로 테이블 순서에서 *를 선택합니다. desc 제한 ". ($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. ?>
코드 복사

OO 스타일 코드, 다음 코드의 데이터베이스 연결은 pear db 클래스를 사용하여 처리됩니다.

  1. // 파일명: pager.class.php
  2. // 페이징 클래스, 이 클래스는 데이터 처리에만 사용됩니다. 구조, 표시 작업 처리를 담당하지 않음
  3. class pager
  4. {
  5. var $pagesize; //각 페이지 수
  6. var $currentpageid; //현재 페이지 수
  7. var $nextpageid; / /다음 페이지
  8. var $previouspageid; //이전 페이지
  9. var $numpages; //총 페이지 수
  10. var $numitems; ; //예 첫 번째 페이지
  11. var $islastpage; // 마지막 페이지가
  12. 인지 여부 var $sql; // SQL 쿼리문
  13. function pager($option)
  14. global $db
  15. $this->_setoptions($option);
  16. //총 항목 수
  17. if ( !isset($this->numitems) )
  18. {
  19. $res = $ db->query($this->sql);
  20. $this->numitems = $res->numrows()
  21. }
  22. // 총 개수 페이지
  23. if ( $this->numitems > 0 )
  24. {
  25. if ( $this->numitems < $this->pagesize ){ $this->numpages = 1; }
  26. if ( $this->numitems % $this->pagesize )
  27. {
  28. $this->numpages= (int)($this->numitems / $this-> 페이지 크기) 1
  29. }
  30. else
  31. {
  32. $this->numpages = $this->numitems / $this->pagesize
  33. }
  34. }
  35. else
  36. {
  37. $this->numpages = 0;
  38. }
  39. 스위치( $this->currentpageid )
  40. {
  41. case $this-> numpages == 1:
  42. $this->isfirstpage = true;
  43. $this->islastpage = true;
  44. break
  45. 사례 1:
  46. $this->isfirstpage = true;
  47. $ this->islastpage = false;
  48. break
  49. 케이스 $this->numpages:
  50. $this->isfirstpage = false; islastpage = true;
  51. break;
  52. 기본값:
  53. $this->isfirstpage = false
  54. $this->islastpage = false; $this->numpages > 1 )
  55. {
  56. if ( !$this->islastpage ) { $this->nextpageid = $this->currentpageid 1 }
  57. if ( ! $this->isfirstpage ) { $this->previouspageid = $this->currentpageid - 1 }
  58. }
  59. return true
  60. /* **
  61. *
  62. * 결과 셋의 데이터베이스 연결을 반환
  63. * 결과 셋이 상대적으로 큰 경우 이 메소드를 직접 사용하여 데이터베이스 연결을 얻은 후 클래스 외부를 순회할 수 있습니다. 오버헤드 감소
  64. * 결과 세트가 그다지 크지 않은 경우 getpagedata를 직접 사용하여 2차원 배열 형식으로 결과를 얻을 수 있습니다.
  65. * getpagedata 메소드도 이 메소드를 호출하여 결과를 얻습니다
  66. *
  67. ***/
  68. function getdatalink()
  69. {
  70. if ( $this->numitems )
  71. {
  72. global $db
  73. $ pageid = $this-> ;currentpageid
  74. $from = ($pageid - 1)*$this->pagesize
  75. $count = $this->pagesize; = $db->limitquery($this->sql, $from, $count); //데이터베이스 호환성을 보장하려면 pear db::limitquery 메소드를 사용하세요.
  76. return $link;
  77. else
  78. {
  79. return false
  80. }
  81. }
  82. /***
  83. *
  84. * 결과 집합을 2차원 배열 형식으로 반환
  85. *
  86. ***/
  87. 함수 getpagedata()
  88. {
  89. if ( $this ->numitems )
  90. {
  91. if ( $res = $this->getdatalink() )
  92. {
  93. if ( $res->numrows() )
  94. {
  95. while ( $row = $res->fetchrow() )
  96. {
  97. $result[] = $row
  98. }
  99. }
  100. else
  101. {
  102. $ result = array();
  103. }
  104. return $result;
  105. }
  106. else
  107. {
  108. return false; 🎜> }
  109. else
  110. {
  111. return false
  112. }
  113. }
  114. function _setoptions($option)
  115. {
  116. $allow_options = array(
  117. 'pagesize',
  118. 'currentpageid',
  119. 'sql',
  120. 'numitems'
  121. )
  122. foreach( $option as $key => $value )
  123. {
  124. if ( in_array($key, $allow_options) && ($value != null) )
  125. {
  126. $this->$key =
  127. }
  128. }
  129. true를 반환합니다.
  130. }
  131. }
  132. ?>
  133. 코드 복사
  134. 페이징 코드 호출:

    지침: 이 클래스는 데이터 처리만 하고 표시는 담당하지 않습니다. 데이터 처리와 결과 표시를 하나의 클래스에 넣는 것이 조금 꺼려지기 때문입니다. 표시 상황과 요구 사항은 변경 가능합니다. 클래스에서 제공한 결과에 따라 처리하는 것이 좋습니다. 더 좋은 방법은 호출기 클래스를 기반으로 자체 하위 클래스를 상속하여 다른 페이지 매김을 표시하는 것입니다. 사용자 페이지 매김 목록:

    1. class memberpager 확장 페이저
    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. 🎜 > $pager_option['numitems'] = (int)$_get['numitems']
    28. }
    29. $pager = @new memberpager($pager_option)
    30. $pager->showmemberlist() ;
    31. ?>
    코드 복사
    둘째, 서로 다른 데이터베이스의 호환성, 서로 다른 데이터베이스에서 결과를 가로채는 작성 방법이 다릅니다.

    1. $pagenum=@ceil($num/$pagesize) ;
    2. if($num > $pagesize){
    3. if($pageval<=1) $pageval=1
    4. if($pageval==$pagenum){
    5. echo "< a href='$url?page=1'>홈페이지 이전 페이지 ='#' class='pageup'>다음 페이지 마지막 페이지" ;
    6. // echo "page".$pageval."/total".$pagenum."page"
    7. echo "페이지로 페이지"
    8. }
    9. }
    10. }
    11. ?>
    코드 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!