当前位置:首页 > PHP教程 > php分页 > 列表

PHP实现的简单分页类及用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2019-07-28 16:00:16 浏览: 评论:0 

本文实例讲述了PHP实现的简单分页类及用法。分享给大家供大家参考,具体如下:

  1. <?php 
  2.  
  3. /* 
  4.  
  5.  * 使用: 
  6.  
  7.  * $page = new Page(连接符,查询语句,当前页码,每页大小,页码符) 
  8.  
  9.  * 连接符:一个MYSQL连接标识符,如果该参数留空,则使用最近一个连接 
  10.  
  11.  * 查询语句:SQL语句 
  12.  
  13.  * 当前页码:指定当前是第几页 
  14.  
  15.  * 每页大小:每页显示的记录数 
  16.  
  17.  * 页码符:指定当前页面URL格式 
  18.  
  19.  * 
  20.  
  21.  * 使用例子: 
  22.  
  23.  * $sql = "select * from aa"; 
  24.  
  25.  * $page = new Page($conn,$sql,$_GET['page'],4,"?page="); 
  26.  
  27.  * 
  28.  
  29.  * 获得当前页码 
  30.  
  31.  * $page->page; 
  32.  
  33.  * 
  34.  
  35.  * 获得总页数 
  36.  
  37.  * $page->pageCount; 
  38.  
  39.  * 
  40.  
  41.  * 获得总记录数 
  42.  
  43.  * $page->rowCount; 
  44.  
  45.  * 
  46.  
  47.  * 获得本页记录数 
  48.  
  49.  * $page->listSize; 
  50.  
  51.  * 
  52.  
  53.  * 获得记录集 
  54.  
  55.  * $page->list; 
  56.  
  57.  * 记录集是一个2维数组,例:list[0]['id']访问第一条记录的id字段值. 
  58.  
  59.  * 
  60.  
  61.  * 获得页码列表 
  62.  
  63.  * $page->getPageList(); 
  64.  
  65.  */ 
  66.  
  67. class Page 
  68.  
  69. { 
  70.  
  71.   //基础数据 
  72.  
  73.   var $sql; 
  74.  
  75.   var $page; 
  76.  
  77.   var $pageSize; 
  78.  
  79.   var $pageStr; 
  80.  
  81.   //统计数据 
  82.  
  83.   var $pageCount; //页数 
  84.  
  85.   var $rowCount; //记录数 
  86.  
  87.   //结果数据 
  88.  
  89.   var $list = array(); //结果行数组 
  90.  
  91.   var $listSize ; 
  92.  
  93.   //构造函数 
  94.  
  95.   function Page($conn,$sql_in,$page_in,$pageSize_in,$pageStr_in) 
  96.  
  97.   { 
  98.  
  99.     $this->sql = $sql_in; 
  100.  
  101.     $this->page = intval($page_in); 
  102.  
  103.     $this->pageSize = $pageSize_in; 
  104.  
  105.     $this->pageStr = $pageStr_in; 
  106.  
  107.     //页码为空或小于1的处理 
  108.  
  109.     if(!$this->page||$this->page<1) 
  110.  
  111.     { 
  112.  
  113.       $this->page = 1; 
  114.  
  115.     } 
  116.  
  117.     //查询总记录数 
  118.  
  119.     $rowCountSql = preg_replace("/([\w\W]*?select)([\w\W]*?)(from[\w\W]*?)/i","$1 count(0) $3",$this->sql); 
  120.  
  121.     if(!$conn) 
  122.  
  123.       $rs = mysql_query($rowCountSql) or die("bnc.page: error on getting rowCount."); 
  124.  
  125.     else 
  126.  
  127.       $rs = mysql_query($rowCountSql,$conn) or die("bnc.page: error on getting rowCount."); 
  128.  
  129.     $rowCountRow = mysql_fetch_row($rs); 
  130.  
  131.     $this->rowCount=$rowCountRow[0]; 
  132.  
  133.     //计算总页数 
  134.  
  135.     if($this->rowCount%$this->pageSize==0) 
  136.  
  137.       $this->pageCount = intval($this->rowCount/$this->pageSize); 
  138.  
  139.     else 
  140.  
  141.       $this->pageCount = intval($this->rowCount/$this->pageSize)+1; 
  142.  
  143.     //SQL偏移量 
  144.  
  145.     $offset = ($this->page-1)*$this->pageSize; 
  146.  
  147.     if(!$conn) 
  148.  
  149.       $rs = mysql_query($this->sql." limit $offset,".$this->pageSize) or die("bnc.page: error on listing."); 
  150.  
  151.     else 
  152.  
  153.       $rs = mysql_query($this->sql." limit $offset,".$this->pageSize,$conn) or die("bnc.page: error on listing."); 
  154.  
  155.     while($row=mysql_fetch_array($rs)) 
  156.  
  157.     { 
  158.  
  159.       $this->list[]=$row; 
  160.  
  161.     } 
  162.  
  163.     $this->listSize = count($this->list); 
  164.  
  165.   } 
  166.  
  167.   /* 
  168.  
  169.    * getPageList方法生成一个较简单的页码列表 
  170.  
  171.    * 如果需要定制页码列表,可以修改这里的代码,或者使用总页数/总记录数等信息进行计算生成. 
  172.  
  173.    */ 
  174.  
  175.   function getPageList() 
  176.  
  177.   { 
  178.  
  179.     $firstPage; 
  180.  
  181.     $previousPage; 
  182.  
  183.     $pageList; 
  184.  
  185.     $nextPage; 
  186.  
  187.     $lastPage; 
  188.  
  189.     $currentPage; 
  190.  
  191.     //如果页码>1则显示首页连接 
  192.  
  193.     if($this->page>1) 
  194.  
  195.     { 
  196.  
  197.       $firstPage = "<a href="\"".$this-">pageStr."1\">首页</a>"; 
  198.  
  199.     } 
  200.  
  201.     //如果页码>1则显示上一页连接 
  202.  
  203.     if($this->page>1) 
  204.  
  205.     { 
  206.  
  207.       $previousPage = "<a href="\"".$this-">pageStr.($this->page-1)."\">上一页</a>"; 
  208.  
  209.     } 
  210.  
  211.     //如果没到尾页则显示下一页连接 
  212.  
  213.     if($this->page<$this->pageCount) 
  214.  
  215.     { 
  216.  
  217.       $nextPage = "<a href="\"".$this-">pageStr.($this->page+1)."\">下一页</a>"; 
  218.  
  219.     } 
  220.  
  221.     //如果没到尾页则显示尾页连接 
  222.  
  223.     if($this->page<$this->pageCount) 
  224.  
  225.     { 
  226.  
  227.       $lastPage = "<a href="\"".$this-">pageStr.$this->pageCount."\">尾页</a>"; 
  228.  
  229.     } 
  230.  
  231.     //所有页码列表 
  232.  
  233.     for($counter=1;$counter<=$this->pageCount;$counter++) 
  234.  
  235.     { 
  236.  
  237.       if($this->page == $counter) 
  238.  
  239.       { 
  240.  
  241.         $currentPage = "<b>".$counter."</b>"; 
  242.  
  243.       } 
  244.  
  245.       else 
  246.  
  247.       { 
  248.  
  249.         $currentPage = " "."<a href="\"".$this-">pageStr.$counter."\">".$counter."</a>"." "; 
  250.  
  251.       } 
  252.  
  253.       $pageList .= $currentPage; 
  254. //phpfensi.com 
  255.     } 
  256.  
  257.     return $firstPage." ".$previousPage." ".$pageList." ".$nextPage." ".$lastPage." "; 
  258.  
  259.   } 
  260.  
  261. } 
  262.  
  263. ?> 

用法示例:

  1. <?php 
  2.  
  3. @$db = mysql_connect('localhost', 'root', '123456') or 
  4.  
  5.     die("Could not connect to database.");//连接数据库 
  6.  
  7. mysql_query("set names 'utf8'");//输出中文 
  8.  
  9. mysql_select_db('test');    //选择数据库 
  10.  
  11. $sql = "select * from `users`"; //一个简单的查询 
  12.  
  13. $page = new Page('',$sql,$_GET['page'],5,"?page="); 
  14.  
  15. $rows = $page->list; 
  16.  
  17. foreach($rows as $row) 
  18.  
  19. { 
  20.  
  21.   echo $row['UserName']."<br>"; 
  22.  
  23. } 
  24.  
  25. echo $page->getPageList(); //输出分页列表 
  26.  
  27. ?> 

Tags: PHP简单分页

分享到: