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连mysql和oracle数据库性能比较
Oct 09 PHP
用PHP制作静态网站的模板框架(三)
Oct 09 PHP
打造计数器DIY三步曲(中)
Oct 09 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
php事务处理实例详解
Jul 11 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
PHP底层运行机制与工作原理详解
Jul 31 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
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
django上传图片并生成缩略图方法示例
2017/12/11 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
Python实现TCP通信的示例代码
2019/09/09 Python
详解Django配置优化方法
2019/11/18 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
python中entry用法讲解
2020/12/04 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
单身联谊活动方案
2014/01/29 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
学生个人自我鉴定
2014/03/26 职场文书
电钳工人个人求职信
2014/05/10 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
售房委托书
2014/08/30 职场文书
公司授权委托书范文
2014/09/21 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
岗位聘任协议书
2015/09/21 职场文书
班主任培训研修日志
2015/11/13 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang