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 相关文章推荐
BBS(php &amp; mysql)完整版(七)
Oct 09 PHP
同时提取多条新闻中的文本一例
Oct 09 PHP
php 中文处理函数集合
Aug 27 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
PHP常用的排序和查找算法
Aug 06 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
PHP addslashes()函数讲解
Feb 03 PHP
如何在PHP中生成随机数
Jun 04 PHP
PHP策略模式写法
Apr 01 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
配置支持SSI
2006/11/25 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
js精度溢出解决方案
2012/12/02 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python pass 语句使用示例
2014/03/11 Python
Python线程详解
2015/06/24 Python
Python利用ansible分发处理任务
2015/08/04 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python实现自动登录
2018/09/17 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
民政局离婚协议书范本
2014/10/20 职场文书
医院科室评语
2015/01/04 职场文书
护士医德考评自我评价
2015/03/03 职场文书
2015年保送生自荐信
2015/03/24 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL