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 生成WML页面方法详解
Aug 09 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
php生成二维码的几种方式整理及使用实例
Jun 03 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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
由document.body和document.documentElement想到的
2009/04/13 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
python从ftp下载数据保存实例
2013/11/20 Python
Python实现Linux下守护进程的编写方法
2014/08/22 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
python实现PID算法及测试的例子
2019/08/08 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
国外的一些J2EE面试题一
2012/10/13 面试题
七年级历史教学反思
2014/02/05 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
毕业生找工作求职信
2014/08/05 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
交通安全教育心得体会
2016/01/15 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
pytorch 6 batch_train 批训练操作
2021/05/28 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电