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 mssql 分页SQL语句优化 持续影响
Apr 26 PHP
编写php应用程序实现摘要式身份验证的方法详解
Jun 08 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
PHP高手需要要掌握的知识点
Aug 21 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
php7中停止php-fpm服务的方法详解
May 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 strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
Python中使用ElementTree解析XML示例
2015/06/02 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
python 定时修改数据库的示例代码
2018/04/08 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
linux面试题参考答案(10)
2016/10/26 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
经典婚礼主持词
2014/03/13 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
办公楼租房协议书范本
2014/11/25 职场文书