分页模块

1. 什么是分页技术

分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,

而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定

页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们

阅读书籍 翻页 很类似 。

2. 分页的意义

分页确实有效,但它一定会加大系统的复杂度,但可否不分页呢?如果数据量少的话当

然可以.但是对于企业信息系统来说数据量不会限制在一个小范围内.如果不顾一切

Select * from某个表,再将返回的数据一古脑的扔给客户,即使客户能够忍受成千

上万足够让人眼花缭乱的表格式数据,繁忙的网络,紧张的服务器也会提出它们无声的

抗议,甚至有时会以彻底的罢工作为终结

3. 如何实现分页

所谓分页显示,也就是讲数据库中的结果集,一段一段显示出来在这里我们就需要用到

Mysql语句中的limit命令

怎么分段,当前在第几段 (每页有几条,当前再第几页)

比如:

10条记录:select * from table limit 0,10

1120条记录:select * from table limit 10,10

2130条记录:select * from table limit 20,10

从上面可以看出规律

(当前页数 - 1 X 每页条数 , 每页条数

Select * from table limit ($Page- 1) * $PageSize, $PageSize

所需的PHP文件

conn.php   连接数据库文件

mupage.php 分页完整文件

3.1开发思路

首先我们来整理下,分页功能的开发思路与流程

( 1 ) 连接数据库

( 2 ) 从数据库传出我们想要的数据

( 3 ) 使用sql语句编写获取分页数据

( 4 ) sql语句传入我们的数据库

( 5 ) 处理我们得到的数据在页面上展示出来

( 6 ) 获取数据总数,计算页数和显示的数据以及偏移量。

( 7 ) 将分页数据初始化,对头部和尾部省略处理

( 8 ) 设置分页条样式显示即可

3.2第一步:简单的分页效果

//释放结果

 mysql_free_result($result);

 //获取数据总数

 $to_sql="SELECT COUNT(*)FROM test";

 $to_result=mysql_fetch_array(mysql_query($to_sql));

 $to=$to_result[0];

 //计算页数

 $to_pages=ceil($to/$PageSize);

 mysql_close($conn);

 /** 3.显示数据+分页条 **/

 $page_banner="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";

 $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";

 $page_banner.="{$to_pages}";

 echo $page_banner;

 

$_SERVER['PHP_SELF'] 的解读

假如命令行的地址是:http://www.baidu.com/index.php

那么:

$_SERVER['HTTP_HOST']=='www.baidu.com'

$_SERVER['PHP_SELF']=='/index.php'

所以 ,一个是主机地址,一个是脚本文件的绝对路径

 

3.3第二步: 增加首页和尾页

 //获取数据总数

$to_sql="SELECT COUNT(*)FROM test";

$to_result=mysqli_fetch_array(mysqli_query($link,$to_sql));

$to=$to_result[0];

//计算页数

$to_pages=ceil($to/$PageSize);

mysql_close($conn);

/** 3.显示数据+分页条 **/

$page_banner="";

//计算偏移量

if($page>1){

    $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";

    $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";

}

if ($page<$to_pages){

    $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";

    $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($to_pages)."'>尾页</a>";

}

$page_banner.="{$to_pages}";

echo $page_banner;

3.4第三步:具体案例, 页码分页

<html>

 <head>

 <meta http-equiv="CONTENT-TYPE" content="text/html;">

 </head>

 <body>

 <?php

 /** 1.传入页面 **/

 $page = $_GET['p'];

 /** 2.根据页面取出数据:php->mysql i  **/

 $host = "localhost";

 $username = 'root';

 $password = ‘’ ;

 $db = 'bbs2';

 $PageSize=5;//每五条分隔

 $ShowPage=3;//我们只显示3个页码

 //连接数据库

 $conn = mysql i _connect($host, $username, $password , $db);

 if(!$conn){

 // echo "数据库连接失败";

 exit;

 }

 //设置数据库编码格式

 mysql_query('SET NAMES UTF8');

 //编写sql获取分页数据:SELECT * FROM 表名 LIMIT 起始位置 , 显示条数

 $sql = "SELECT*FROM test LIMIT ".($page-1)*$PageSize .",$PageSize";

 if(!$sql){

 echo "取出不成功";

 };

 //sql语句传送到数据库

 $result = mysql_query($sql);

 //处理我们的数据

 echo "<table border=1 cellspacing=0 width=15% >";

 echo "<tr><td>ID</td><td>名字</td><td>性别</td></tr>";

 while($row = mysql_fetch_assoc($result)){

 echo "<tr>";

 echo "<td>{$row['id']}</td>";

 echo "<td>{$row['name']}</td>";

 echo "<td>{$row['sex']}</td>";

 echo "<tr>";

 }

 echo "</table>";

 //释放结果

 mysql_free_result($result);

 //获取数据总数

 $to_sql="SELECT COUNT(*)FROM test";//用来计算数据总数

 $to_result=mysql_fetch_array(mysql_query($to_sql));

 $to=$to_result[0];//取得总数

 //计算页数

 $to_pages=ceil($to/$PageSize);//计算页数,ceil向上取整数

 mysql_close($conn);

 /** 3.显示数据+分页条 **/

 $page_banner="";

 //计算偏移量

 $pageffset=($ShowPage-1)/2;//页面偏移码

 if($page>1){

 $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";

 $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";

 }

 //初始化数据

 $start=1;//分页第一个标记

 $end=$to_pages;//分页最后一个标记

 if ($to_pages>$ShowPage){//如果总页数大于显示页码数目,$to_pages超过4则满足

 if($page>$pageffset+1){//如果当前页大于页面偏移码+1的话,则左标显示...

 $page_banner.="...";

 }

 if ($page>$pageffset){//如果页面大于页面偏移码

 $start=$page-$pageffset;//分页标记改变,当前页码-偏移码=中间分页码最左边页码

 $end=$to_pages>$page+$pageffset?$page+$pageffset:$to_pages;

 //判断语句,如果总页数大于当前页数+偏移码,真则$end=页数+偏移码,假则$end=总页数

 }else{//如果页面不大于页面偏移码

 $start=1;//开始页为首页

 $end=$to_pages>$ShowPage?$ShowPage:$to_pages;

 }

 if ($page+$pageffset>$to_pages){//到了最后几页

 $start=$start-($page+$pageffset-$end);//最后几页的第一标记

 }

 }

 for($i=$start;$i<=$end;$i++){

 $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($i)."'>{$i}</a>";

 }

 //尾部省略

 if ($to_pages>$ShowPage&&$to_pages>$page+$pageffset){

 //如果总页数大于显示页码且总页数大于当前页加偏移页

 $page_banner.="...";

 }

 if ($page<$to_pages){

 $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";

 $page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($to_pages)."'>尾页</a>";

 }

 

$page_banner.="{$to_pages}";

$page_banner.="<form action='mupage.php' method='get'>";

$page_banner.="到第<input type='text'size='2'name='p'>";

$page_banner.="<input type='submit'value='确定'>";

$page_banner.="</form></div>";

echo $page_banner;

 ?>

 </body>

 </html>

4.  总结

分页技术并不难理解,主要是对SQL语句limit的应用,在清楚理解分页开发思路后,主要对SQL语句里的 ” ..... limit ” . ($page-1)*$PageSize .",$PageSize" 理解透彻,并对需要获取的数据实现获取,那么分页技术基本上没有什么难点可言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值