PHP分页显示的方法分析【附PHP通用分页类】


Posted in PHP onMay 10, 2018

本文实例讲述了PHP分页显示的方法。分享给大家供大家参考,具体如下:

<?php
header("content-type:text/html;charset=utf-8");
$currentpage = 1;
if(isset($_GET['page']))
  $currentpage = $_GET['page'];
//连接数据库
$link = mysql_connect("localhost","root","") or die('连接失败');
mysql_select_db('myschool');
mysql_query('set names utf8');
$sql ="SELECT count(*) as 'count' from student";//查询记录的sql语句
$result = mysql_query($sql);
$arr = mysql_fetch_array($result);
$count = $arr['count'];
$pagesize = 3;
$pages = ceil($count/$pagesize);//共多少页
$prepage = $currentpage -1;
if($prepage<=0)
  $prepage=1;
$nextpage = $currentpage+1;
if($nextpage >= $pages){
 $nextpage = $pages;
}
$start =($currentpage-1) * $pagesize;//起始位置
$sql = "SELECT * from student limit $start,$pagesize";
echo $sql;
// $sql = "select * from student";
$result = mysql_query($sql);
?>
<!-- html部分 -->
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
<table border="1">
 <tr>
 <td>学号</td>
 <td>姓名</td>
 <td>性别</td>
 <td>年龄</td>
 </tr>
<?php while($arr=mysql_fetch_array($result)){ ?>
 <td><?php echo $arr['number']; ?></td>
 <td><?php echo $arr['name']; ?></td>
 <td><?php echo $arr['sex']; ?></td>
 <td><?php echo $arr['age']; ?></td>
 </tr>
<?php } ?>
 </table>
 <a href="<?php echo $_SERVER['PHP_SELF'].'?page='.$prepage; ?>" rel="external nofollow" >上一页</a>  <a href="<?php echo $_SERVER['PHP_SELF'].'?page='.$nextpage; ?>" rel="external nofollow" >下一页</a>
</body>
</html>

注:当一个文件中有php和html两种时,php文件必须有结束标记

附:php通用分页类与用法:

Page.class.php文件:

<?php
/**
 * 分页类
 *
 * 调用方式:
 * $p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]);
 * print_r($p->getPages()); //生成一个页码数组(键为页码,值为链接)
 * echo $p->showPages(1);  //生成一个页码样式(可添加自定义样式)
 *
 */
/*
总条数,需要显示的页数,当前页,每页显示的条数,连接
生成一个一维数组,键为页码 值为连接
返回一个生成好样式的页码(并且可以根据自己需要添加样式)
默认样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
*/
class Page{
  protected $count;    //总条数
  protected $showPages;  //需要显示的页数
  protected $countPages; //总页数
  protected $currPage;  //当前页
  protected $subPages;  //每页显示条数
  protected $href;    //连接
  protected $page_arr=array();  //保存生成的页码 键页码 值为连接
  /**
   * __construct 构造函数(获取分页所需参数)
   * @param int $count   总条数
   * @param int $showPages 显示页数
   * @param int $currPage 当前页数
   * @param int $subPages 每页显示数量
   * @param string $href  连接(不设置则获取当前URL)
   */
  public function __construct($count,$showPages,$currPage,$subPages,$href=''){
    $this->count=$count;
    $this->showPages=$showPages;
    $this->currPage=$currPage;
    $this->subPages=$subPages;
    //如果链接没有设置则获取当前连接
    if(empty($href)){
      $this->href=htmlentities($_SERVER['PHP_SELF']);
    }else{
      $this->href=$href;
    }
    $this->construct_Pages();
  }
  /**
   * getPages 返回页码数组
   * @return array 一维数组 键为页码 值为链接
   */
  public function getPages(){
    return $this->page_arr;
  }
  /**
   * showPages 返回生成好的页码
   * @param int $style 样式
   * @return string   生成好的页码
   */
  public function showPages($style=1){
    $func='pageStyle'.$style;
    return $this->$func();
  }
  /**
   * pageStyle1 分页样式(可参照这个添加自定义样式 例如pageStyle2())
   * 样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
   * @return string
   */
  protected function pageStyle1(){
    /* 构造普通模式的分页
    共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
    */
    $pageStr='共'.$this->count.'条记录,每页显示'.$this->subPages.'条';
    $pageStr.='当前第'.$this->currPage.'/'.$this->countPages.'页 ';
    $_GET['page'] = 1;
    $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首页</a>] </span>';
    //如果当前页不是第一页就显示上页
    if($this->currPage>1){
      $_GET['page'] = $this->currPage-1;
      $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >上页</a>] </span>';
    }
    foreach ($this->page_arr as $k => $v) {
      $_GET['page'] = $k;
      $pageStr.='<span>[<a href="'.$v.'" rel="external nofollow" >'.$k.'</a>] </span>';
    }
    //如果当前页小于总页数就显示下一页
    if($this->currPage<$this->countPages){
      $_GET['page'] = $this->currPage+1;
      $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >下页</a>] </span>';
    }
    $_GET['page'] = $this->countPages;
    $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >尾页</a>] </span>';
    return $pageStr;
  }
  /**
   * construct_Pages 生成页码数组
   * 键为页码,值为链接
   * $this->page_arr=Array(
   *         [1] => index.php?page=1
   *         [2] => index.php?page=2
   *         [3] => index.php?page=3
   *         ......)
   */
  protected function construct_Pages(){
    //计算总页数
    $this->countPages=ceil($this->count/$this->subPages);
    //根据当前页计算前后页数
    $leftPage_num=floor($this->showPages/2);
    $rightPage_num=$this->showPages-$leftPage_num;
    //左边显示数为当前页减左边该显示的数 例如总显示7页 当前页是5 左边最小为5-3 右边为5+3
    $left=$this->currPage-$leftPage_num;
    $left=max($left,1); //左边最小不能小于1
    $right=$left+$this->showPages-1; //左边加显示页数减1就是右边显示数
    $right=min($right,$this->countPages); //右边最大不能大于总页数
    $left=max($right-$this->showPages+1,1); //确定右边再计算左边,必须二次计算
    for ($i=$left; $i <= $right; $i++) {
      $_GET['page'] = $i;
      $this->page_arr[$i]=$this->href.'?'.http_build_query($_GET);
    }
  }
}
?>

用法示例demo.php:

<?php
/**
 * demo
 */
header("content-type:text/html;charset=utf8");
include('Page.class.php');  //引入类
//$p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]);
//连接不设置则为当前链接
$page=isset($_GET['page']) ? $_GET['page'] : 1;
$p=new Page(100,4,$page,8);
//生成一个页码数组(键为页码,值为链接)
echo "<pre>";
print_r($p->getPages());
//样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
echo $p->showPages(1);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
php读取html并截取字符串的简单代码
Nov 30 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
PHP程序级守护进程的实现与优化的使用概述
May 02 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
php blowfish加密解密算法
Jul 02 PHP
示例详解Laravel的注册重构
Aug 14 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
PHP利用二叉堆实现TopK-算法的方法详解
Apr 24 PHP
PHP反射学习入门示例
Jun 14 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 #PHP
PHP实现用户登录的案例代码
May 10 #PHP
yii2多图上传组件的使用教程
May 10 #PHP
PHP数组去重的更快实现方式分析
May 09 #PHP
PHP+MySQL实现消息队列的方法分析
May 09 #PHP
PHP共享内存使用与信号控制实例分析
May 09 #PHP
php curl批处理实现可控并发异步操作示例
May 09 #PHP
You might like
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
php实现文件编码批量转换
2014/03/10 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
JS跨域总结
2012/08/30 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
python opencv调用笔记本摄像头
2019/08/28 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
python 消费 kafka 数据教程
2019/12/21 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
.NET方向面试题
2014/11/20 面试题
餐饮总经理岗位职责
2014/03/07 职场文书
担保书怎么写
2014/04/01 职场文书
小学生期末评语大全
2014/04/21 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2015年暑假生活总结
2015/07/13 职场文书
党组织结对共建协议书
2016/03/23 职场文书