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 Zip压缩 在线对文件进行压缩的函数
May 26 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
php判断ip黑名单程序代码实例
Feb 24 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
PHP基于mcript扩展实现对称加密功能示例
Feb 21 PHP
PHP迭代器和生成器用法实例分析
Sep 28 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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/03/23 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
jquery.validate的使用说明介绍
2013/11/12 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
原生JS实现天气预报
2020/06/16 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python中append实例用法总结
2019/07/30 Python
Django重设Admin密码过程解析
2020/02/10 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
PHP如何自定义函数
2016/09/16 面试题
信息技术毕业生自荐信范文
2014/03/13 职场文书
农村婚庆主持词
2015/06/29 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python