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控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
PHP文件上传操作实例详解
Sep 27 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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调用三种数据库的方法(2)
2006/10/09 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
js使用递归解析xml
2014/12/12 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
Python的print用法示例
2014/02/11 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
应届毕业生求职信范例分享
2013/12/17 职场文书
检察官就职演讲稿
2014/01/13 职场文书
公司保密承诺书
2014/03/27 职场文书
设计专业自荐信
2014/06/19 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
死者家属慰问信
2015/03/24 职场文书
小组组名及励志口号
2015/12/24 职场文书
Python与C++中梯度方向直方图的实现
2022/03/17 Python