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

分页显示是一种非常常见的浏览和显示大量数据的方法,属于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>";
 } 

 ?>

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

(0)

相关推荐

  • PHP框架Laravel插件Pagination实现自定义分页

    Laravel 的分页很方便,其实扩展起来也挺容易的,下面就来做个示例,扩展一下 paginate() 和 simplePaginate() 方法,来实现我们自定义分页样式,比如显示 "上一页" 和 "下一页" ,而不是 "<" 和 ">" ,当然扩展的方法掌握了你就可以肆无忌惮的扩展一个你想要的分页了,比如跳转到某一页,分页显示一共多少记录,当前显示的记录范围等等巴拉巴拉的... 5.1和5.2应该是同样的方法,

  • 功能强大的php分页函数

    分页是每一个程序需要去理解的东西,学习过的几门语言中我发现分页原理都是一样的,下面为php初学者分析一下php分页实现与最后面补充了一个超级强大的分页函数. 文章内容分页主要有两个办法: 办法一.按字数控制进行分页 按字数分页办法简单易用,但效果不好. 大致思想:首先.设定每页能容纳的最大字数,然后.计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数,这样整个分页的准备工作就已经做好了. 具体到每一页的显示内容可以通过内容截取来实现,比如:页容纳500字,文章内容有2200字,那么当页

  • php实现分页功能的3种方法第1/3页

    直接上代码,希望大家仔细阅读. 方法一:讲sql查询进行分页进行,需要调用几个函数,具体见脚本: 1.pager.class.php <?php class pager { public $sql; //SQL查询语句 public $datanum; //查询所有的数据总记录数 public $page_size; //每页显示记录的条数 protected $_errstr; protected $_conn; protected $_query_id; public function qu

  • 详解PHP+AJAX无刷新分页实现方法

    PHP+AJAX无刷新分页实现代码详解,最近在看ajax 教程,就想写个简单入门的PHP+AJAX无刷新分页,我们依据ajax开发框架,代码如下: var http_request=false; function send_request(url){//初始化,指定处理函数,发送请求的函数 http_request=false; //开始初始化XMLHttpRequest对象 if(window.XMLHttpRequest){//Mozilla浏览器 http_request=new XMLH

  • 两款万能的php分页类

    本文为大家分享个超级好用.万能的php分页类,具体的实现代码如下 第一款php分页类 <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * 分页类 * 使用方式: * $page = new Page(); * $page->init(1000, 20); * $page->setNotActiveTemplate('<

  • PHP MSSQL 分页实例

    本文实例为大家分享了PHP MSSQL可刷新分页实例,具体内容如下 <?php /* '页面说明: */ $link=mssql_connect("MYSQL2005","sa","123456") or die("db link error!".mssql_error()); mssql_select_db("edu_dzk",$link) or die("db open error!&q

  • 基于PHP实现数据分页显示功能

    本文实例为大家分享了数据分页显示功能的PHP实现代码,供大家参考,具体内容如下 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户列表</title> </head> <body> <?php $con = mysql_connect("localhost","root&

  • php+ajax实现无刷新分页

    本文实例讲述了php+ajax实现无刷新分页实现方法.分享给大家供大家参考.具体如下:     limit  偏移量,长度;     limit  0,7;   第一页     limit  7,7;   第二页     limit  14,7;  第三页 每页信息条数:7 信息总条数:select count(*) from table 信息总页数:ceil向上取整(总条数/每页条数) 1.分页类具体使用 <?php class Pagination { private $total; //数

  • jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解

    本文使用jQuery,结合PHP和Mysql,通过实例讲解如何实现Ajax数据加载效果. HTML <div id="list"> <ul></ul> </div> <div id="pagecount"></div> 页面中,#list用来展示数据列表,包括本例要展示的商品图片和标题,#pagecount用来展示分页条,即本例中的上一页.下一页. 当然,别忘了,在head中预先载入jquery

  • php实现分页显示

    所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)? 当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特定的结果出来. 至于其他的参数,比如:上一页($PReviousPageID).下一页($NextPageID).总页数($numPages)等等,都可以根据之前的知识获得. 以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from ta

随机推荐