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代码的53条建议
Mar 27 PHP
php 字符串函数收集
Mar 29 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
有关PHP性能优化的介绍
Jun 20 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
php返回json数据函数实例
Oct 09 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 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执行批量mysql语句的解决方法
2013/05/02 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
axios学习教程全攻略
2017/03/26 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
Python类的用法实例浅析
2015/05/27 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
Python3计算三角形的面积代码
2017/12/18 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
Python中的集合介绍
2019/01/28 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
学术会议主持词
2014/03/17 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
青年教师个人总结
2015/02/11 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
Golang日志包的使用
2022/04/20 Golang
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL