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 404错误页面实现代码
Jun 22 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
学习php分页代码实例
Oct 24 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 PHP
详解PHP Swoole与TCP三次握手
May 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 curl模拟post提交数据示例
2013/12/31 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
numpy数组拼接简单示例
2017/12/15 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
浅析python中while循环和for循环
2019/11/19 Python
金宝贝童装官网:Gymboree
2016/08/31 全球购物
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
如何写一封打动人心的求职信
2014/02/17 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2016年元旦致辞
2015/08/01 职场文书
2015国庆节感想
2015/08/04 职场文书
导游词之无锡唐城
2019/12/12 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
Python中rapidjson参数校验实现
2021/07/25 Python
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫