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


Posted in PHP onMay 06, 2016

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

<?php
/*
 * 使用:
 * $page = new Page(连接符,查询语句,当前页码,每页大小,页码符)
 * 连接符:一个MYSQL连接标识符,如果该参数留空,则使用最近一个连接
 * 查询语句:SQL语句
 * 当前页码:指定当前是第几页
 * 每页大小:每页显示的记录数
 * 页码符:指定当前页面URL格式
 *
 * 使用例子:
 * $sql = "select * from aa";
 * $page = new Page($conn,$sql,$_GET['page'],4,"?page=");
 *
 * 获得当前页码
 * $page->page;
 *
 * 获得总页数
 * $page->pageCount;
 *
 * 获得总记录数
 * $page->rowCount;
 *
 * 获得本页记录数
 * $page->listSize;
 *
 * 获得记录集
 * $page->list;
 * 记录集是一个2维数组,例:list[0]['id']访问第一条记录的id字段值.
 *
 * 获得页码列表
 * $page->getPageList();
 */
class Page
{
  //基础数据
  var $sql;
  var $page;
  var $pageSize;
  var $pageStr;
  //统计数据
  var $pageCount; //页数
  var $rowCount; //记录数
  //结果数据
  var $list = array(); //结果行数组
  var $listSize ;
  //构造函数
  function Page($conn,$sql_in,$page_in,$pageSize_in,$pageStr_in)
  {
    $this->sql = $sql_in;
    $this->page = intval($page_in);
    $this->pageSize = $pageSize_in;
    $this->pageStr = $pageStr_in;
    //页码为空或小于1的处理
    if(!$this->page||$this->page<1)
    {
      $this->page = 1;
    }
    //查询总记录数
    $rowCountSql = preg_replace("/([\w\W]*?select)([\w\W]*?)(from[\w\W]*?)/i","$1 count(0) $3",$this->sql);
    if(!$conn)
      $rs = mysql_query($rowCountSql) or die("bnc.page: error on getting rowCount.");
    else
      $rs = mysql_query($rowCountSql,$conn) or die("bnc.page: error on getting rowCount.");
    $rowCountRow = mysql_fetch_row($rs);
    $this->rowCount=$rowCountRow[0];
    //计算总页数
    if($this->rowCount%$this->pageSize==0)
      $this->pageCount = intval($this->rowCount/$this->pageSize);
    else
      $this->pageCount = intval($this->rowCount/$this->pageSize)+1;
    //SQL偏移量
    $offset = ($this->page-1)*$this->pageSize;
    if(!$conn)
      $rs = mysql_query($this->sql." limit $offset,".$this->pageSize) or die("bnc.page: error on listing.");
    else
      $rs = mysql_query($this->sql." limit $offset,".$this->pageSize,$conn) or die("bnc.page: error on listing.");
    while($row=mysql_fetch_array($rs))
    {
      $this->list[]=$row;
    }
    $this->listSize = count($this->list);
  }
  /*
   * getPageList方法生成一个较简单的页码列表
   * 如果需要定制页码列表,可以修改这里的代码,或者使用总页数/总记录数等信息进行计算生成.
   */
  function getPageList()
  {
    $firstPage;
    $previousPage;
    $pageList;
    $nextPage;
    $lastPage;
    $currentPage;
    //如果页码>1则显示首页连接
    if($this->page>1)
    {
      $firstPage = "<a href=\"".$this->pageStr."1\">首页</a>";
    }
    //如果页码>1则显示上一页连接
    if($this->page>1)
    {
      $previousPage = "<a href=\"".$this->pageStr.($this->page-1)."\">上一页</a>";
    }
    //如果没到尾页则显示下一页连接
    if($this->page<$this->pageCount)
    {
      $nextPage = "<a href=\"".$this->pageStr.($this->page+1)."\">下一页</a>";
    }
    //如果没到尾页则显示尾页连接
    if($this->page<$this->pageCount)
    {
      $lastPage = "<a href=\"".$this->pageStr.$this->pageCount."\">尾页</a>";
    }
    //所有页码列表
    for($counter=1;$counter<=$this->pageCount;$counter++)
    {
      if($this->page == $counter)
      {
        $currentPage = "<b>".$counter."</b>";
      }
      else
      {
        $currentPage = " "."<a href=\"".$this->pageStr.$counter."\">".$counter."</a>"." ";
      }
      $pageList .= $currentPage;
    }
    return $firstPage." ".$previousPage." ".$pageList." ".$nextPage." ".$lastPage." ";
  }
}
?>

用法示例:

<?php
@$db = mysql_connect('localhost', 'root', '123456') or
    die("Could not connect to database.");//连接数据库
mysql_query("set names 'utf8'");//输出中文
mysql_select_db('test');    //选择数据库
$sql = "select * from `users`"; //一个简单的查询
$page = new Page('',$sql,$_GET['page'],5,"?page=");
$rows = $page->list;
foreach($rows as $row)
{
  echo $row['UserName']."<br>";
}
echo $page->getPageList(); //输出分页列表
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP个人网站架设连环讲(三)
Oct 09 PHP
php的curl实现get和post的代码
Aug 23 PHP
比较详细PHP生成静态页面教程
Jan 10 PHP
memcache命令启动参数中文解释
Jan 13 PHP
php获取mysql字段名称和其它信息的例子
Apr 14 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
PHP实现的多文件上传类及用法示例
May 06 #PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 #PHP
php将一维数组转换为每3个连续值组成的二维数组
May 06 #PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 #PHP
PHP图片加水印实现方法
May 06 #PHP
php数组冒泡排序算法实例
May 06 #PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 #PHP
You might like
php与php MySQL 之间的关系
2009/07/17 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
PHP可变变量学习小结
2015/11/29 PHP
CI框架常用函数封装实例
2016/11/21 PHP
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
JavaScript学习历程和心得小结
2010/08/16 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
JavaScript中Function详解
2015/02/27 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
大学校园活动策划书
2014/02/04 职场文书
好人好事事迹材料
2014/02/12 职场文书
房产代理公证处委托书
2014/04/04 职场文书
增员口号大全
2014/06/18 职场文书
个人四风对照检查材料
2014/09/26 职场文书
母亲节感言
2015/08/03 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
Python读取和写入Excel数据
2022/04/20 Python