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+oracle 分页类
Oct 09 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
php新建文件的方法实例
Sep 26 PHP
PHP7 错误处理机制修改
Mar 09 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里面的抽象类
2010/01/28 PHP
php实现rc4加密算法代码
2012/04/25 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
JavaScript中的Array对象使用说明
2011/01/17 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
python实现超简单端口转发的方法
2015/03/13 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Python内置类型性能分析过程实例
2020/01/29 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
写出一个方法实现冒泡排序
2016/07/08 面试题
国际贸易专业推荐信
2013/11/15 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
人工作失职检讨书
2015/05/05 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
Python matplotlib多个子图绘制整合
2022/04/13 Python
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技