php分页原理 分页代码 分页类制作教程


Posted in PHP onSeptember 23, 2016

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解。

一、分页原理:

       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

       每页多少条记录($PageSize)?
       当前是第几页($CurrentPageID)?

       现在只要再给我一个结果集,我就可以显示某段特定的结果出来。

       至于其他的参数,比如:上一页($PReviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。

       以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

       前10条记录:select * from table limit 0,10
       第11至20条记录:select * from table limit 10,10
       第21至30条记录:select * from table limit 20,10
……
        这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:
        select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
        拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。

二、分页代码说明:五个步骤

代码中有充分解释,可复制到自己记事本中直接使用 

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>雇员信息列表</title>
</head>
<?php 
    //显示所有emp表的信息
    //1.连接数据库
    $conn=mysql_connect('localhost','root','1234abcd') or die('连接数据库错误'.mysql_error());
    //2.选择数据库
    mysql_select_db('empManage');
   //3.选择字符集
    mysql_query('set names utf8');
   //4.发送sql语句并得到结果进行处理
    //4.1分页[分页要发出两个sql语句,一个是获得$rowCount,一个是通过sql的limit获得分页结果。所以我们会获得两个结果集,在命名的时候要记得区分。
分页 (四个值 两个sql语句)。]
  $pageSize=3;//每页显示多少条记录
   $rowCount=0;//共有多少条记录
    $pageNow=1;//希望显示第几页
    $pageCount=0;//一共有多少页 [分页共有这个四个指标,缺一不可。由于$rowCount可以从服务器获得的,所以可以给予初始值为0;
$pageNow希望显示第几页,这里最好是设置为0;$pageSize是每页显示多少条记录,这里根据网站需求提前制定。
.$pageCount=ceil($rowCount/$pageSize),既然$rowCount可以初始值为0,那么$pageCount当然也就可以设置为0.四个指标,两个0 ,一个1,另一个为网站需求。]
         //4.15根据分页链接来修改$pageNow的值
         if(!empty($_GET['pageNow'])){
            $pageNow=$_GET['pageNow'];
        }[根据分页链接来修改$pageNow的值。]
     $sql='select count(id) from emp';
     $res1=mysql_query($sql);
    //4.11取出行数
     if($row=mysql_fetch_row($res1)){
        $rowCount=$row[0];        
    }//[取得$rowCount,,进了我们就知道了$pageCount这两个指标了。]
    //4.12计算共有多少页
     $pageCount=ceil($rowCount/$pageSize);
    $pageStart=($pageNow-1)*$pageSize;
    
     //4.13发送带有分页的sql结果
     $sql="select * from emp limit $pageStart,$pageSize";//[根据$sql语句的limit 后面的两个值(起始值,每页条数),来实现分页。以及求得这两个值。]
    $res2=mysql_query($sql,$conn) or die('无法获取结果集'.mysql_error());
     echo '<table border=1>';[    echo "<table border='1px' cellspacing='0px' bordercolor='red' width='600px'>";]
 "<tr><th>id</th><th>name</th><th>grade</th><th>email</th><th>salary</th><th><a href='#'>删除用户</a></th><th><a href='#'>修改用户</a></th></tr>";    while($row=mysql_fetch_assoc($res2)){
        echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['grade']}</td><td>{$row['email']}</td><td>{$row['salary']}</td><td><a href='#'>删除用户</a></td><td><a href='#'>修改用户</a></td></tr>";    }
     echo '</table>';
     //4.14打印出页码的超链接
     for($i=1;$i<=$pageCount;$i++){
         echo "<a href='?pageNow=$i'>$i</a> ";//[打印出页码的超链接]
     
     }
     //5.释放资源,关闭连接
     mysql_free_result($res2);
    mysql_close($conn);
?>
</html>

三、简单分页类分享

现在公布一个简单分类制作。只要理解了这个类的原理和步骤,其他复杂类也就能够触类旁通了。不废话,直接上源码,可以直接用在你的项目中。

数据库操作类代码:mysqli.func.php

<?php 
// 数据库连接常量 
 define('DB_HOST', 'localhost'); 
 define('DB_USER', 'root'); 
 define('DB_PWD', ''); 
 define('DB_NAME', 'guest'); 
  
 // 连接数据库 
 function conn() 
 { 
   $conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME); 
   mysqli_query($conn, "set names utf8"); 
  return $conn; 
} 
 
//获得结果集 
function doresult($sql){ 
 $result=mysqli_query(conn(), $sql); 
  return $result; 
 } 
 
 //结果集转为对象集合 
 function dolists($result){ 
  return mysqli_fetch_array($result, MYSQL_ASSOC); 
 } 
 
 function totalnums($sql) { 
  $result=mysqli_query(conn(), $sql); 
 return $result->num_rows; 
 } 
  
 
 // 关闭数据库 
 function closedb() 
 { 
   if (! mysqli_close()) { 
    exit('关闭异常'); 
   } 
} 
 
?>

    

分页实现代码:

<?php 
 include 'mysqli.func.php'; 
 // 总记录数 
 $sql = "SELECT dg_id FROM tb_user "; 
 $totalnums = totalnums($sql); 
  
 // 每页显示条数 
 $fnum = 8; 
 
 // 翻页数 
 $pagenum = ceil($totalnums / $fnum); 
 
 //页数常量 
 @$tmp = $_GET['page']; 
  
 //防止恶意翻页 
 if ($tmp > $pagenum) 
   echo "<script>window.location.href='index.php'</script>"; 
  
 //计算分页起始值 
 if ($tmp == "") { 
  $num = 0; 
} else { 
  $num = ($tmp - 1) * $fnum; 
 } 
// 查询语句 
 $sql = "SELECT dg_id,dg_username FROM tb_user ORDER BY dg_id DESC LIMIT " . $num . ",$fnum"; 
 $result = doresult($sql); 
 
 // 遍历输出 
 while (! ! $rows = dolists($result)) { 
   echo $rows['dg_id'] . " " . $rows['dg_username'] . "<br>"; 
 } 
  
 // 翻页链接 
 for ($i = 0; $i < $pagenum; $i ++) { 
   echo "<a href=index.php?page=" . ($i + 1) . ">" . ($i + 1) . "</a>"; 
 } 
 
 ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本

PHP 相关文章推荐
php date()日期时间函数详解
May 16 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
PHP设计模式之工厂模式实例总结
Sep 01 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 PHP
PHP使用观察者模式处理异常信息的方法详解
Sep 24 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 PHP
php使用glob函数遍历文件和目录详解
Sep 23 #PHP
php版微信发红包接口用法示例
Sep 23 #PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 #PHP
php版微信自动登录并获取昵称的方法
Sep 23 #PHP
php中使用websocket详解
Sep 23 #PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 #PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 #PHP
You might like
php URL编码解码函数代码
2009/03/10 PHP
destoon官方标签大全
2014/06/20 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
介绍一下linux的文件系统
2015/10/06 面试题
岗位职责怎么写
2014/03/14 职场文书
学习十八大标语
2014/10/09 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
党支部培养考察意见
2015/06/02 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript