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 相关文章推荐
也谈截取首页新闻 - 范例
Oct 09 PHP
PHP取整数函数常用的四种方法小结
Jul 05 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
laravel orm 关联条件查询代码
Oct 21 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 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
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
js 巧妙去除数组中的重复项
2010/01/25 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
javascript闭包的理解
2015/04/01 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
处理Python中的URLError异常的方法
2015/04/30 Python
python针对excel的操作技巧
2018/03/13 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
教师求职推荐信范文
2013/11/20 职场文书
总经理助理职责
2014/02/04 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
介绍信怎么写
2015/01/30 职场文书
质量保证书格式
2015/02/27 职场文书
清明节寄语2015
2015/03/23 职场文书
欢送会主持词
2015/07/01 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
用Python实现Newton插值法
2021/04/17 Python
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
golang 实用库gotable的具体使用
2021/07/01 Golang