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 相关文章推荐
网页游戏开发入门教程三(简单程序应用)
Nov 02 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
php 地区分类排序算法
Jul 01 PHP
yii上传文件或图片实例
Apr 01 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
php简单中奖算法(实例)
Aug 15 PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 PHP
Laravel5.1 框架路由基础详解
Jan 04 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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&amp;&amp;mysql)六
2006/10/09 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python实现一个简单的ping工具方法
2019/01/31 Python
关于python字符串方法分类详解
2019/08/20 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
网络工程师个人的自我评价范文
2013/10/01 职场文书
经理助理岗位职责
2014/03/05 职场文书
英文自荐信常用句子
2014/03/26 职场文书
应届毕业生求职信
2014/05/26 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
幼儿园教师求职信
2015/03/20 职场文书
道歉信范文
2015/05/12 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL
分享提高 Python 代码的可读性的技巧
2022/03/03 Python