什么是分页
分页其实和我们读书翻页的功能是一样的,用户每次看到的不是全部的数据,而是其中的一部分,如果没有在其中找到自己想要的内容,可以通过指定的页码或者翻页的方式转换可见内容。
分页的意义
能否不使用分页,如果数据量少的话可以不分页,但是有成千上万条记录的时候分页就展示了它强大的功能。虽然使用分页会加大系统的复杂度,但是效果很棒。就像一本书只让它在一张纸上显示,那该是怎样的让人头疼的效果。
如何实现分页
要使结果分页显示应使用mysqli中的limit指令。
Limit(索引号,每页条数)
页码 | 索引号 | 每页条数 |
第一页 | 0 | 5 |
第二页 | 5 | 5 |
第三页 | 10 | 5 |
第n页 | n-1*5 | 5 |
以每页显示5条为例
公式
偏移量:(n-1)*5
每页条数:5
实现分页功能的流程:
- 获得页码
- 连接数据库
- 使用sql语句编写获取分页数据
- 数据库传出我们想要的数据
- 用sql语句传入我们的数据库
- 整理我们得到的数据在页面上展示出来
- 获取数据总数,计算页数和显示的数据以及偏移量
- 使分页数据初始化,对头部和尾部省略处理
获得页码
<?php
//传入页码
$page = $_GET['p'];
?>
连接数据库
<?php
//mysqli('地址','用户名','密码','数据库名')
$conn = @new mysqli('localhost','root','','myschool');
//测试是否连接数据库
if(empty($_POST)){
die('连接失败');
}
//设置数据库编码格式
$conn->set_charset('utf8');
?>
使用sql语句编写获取分页数据
我们知道limit的语句结构是limit(索引数,每页条数),而且我们在上面的代码中已经获得了页码数,所以我们可以把代码写活,这样,我们的代码可以重用,容易修改。要记住千万不要把代码写死。我们的公式是limit(页码-1*5,每页条数),在设置sql语句是带入这个公式就可以了。
<?php
//获取页码
$page = $_GET['p'];
//设置sql语句
$sql = "select * from student limit" . ($page-1) * 5 . ",5";
//执行sql
$result = mysqli_query($sql);
?>
数据库传出我们想要的数据
读取数据库的三中方法
第一种:使用mysqli_fetch_assoc
mysqli_fetch_assoc:将结果行作为关联、数值数组或两者取回。
返回值:返回与获取的行对应的字符串数组,如果结果集中没有其他行,则返回NULL。
第二种:使用mysqli_fetch_row
mysqli_fetch_row:将结果行作为枚举数组
返回值:返回与获取的行对应的字符串数组,如果结果集中没有其他行,则返回NULL。
第三种:使用mysqli_fetch_array
mysqli_fetch_array:将结果行作为关联、数值数组或两者取回。
返回值:返回与获取的行对应的字符串数组,如果结果集中没有其他行,则返回NULL。
<?php
//读取数据使用php函数中的mysqli_fetch_assoc
while($row = mysqli_fetch_assoc($result)){
}
?>
用sql语句传入我们的数据库
$time=time();
$sql="insert into user(id,user,pwd,create_time) values(null,'$user','$pwd',$time)";
整理我们得到的数据在页面上展示出来
把数据库中的记录取出来显示在页面上同样使用的是sql语句
$sql="select id,user,create_time from user" ;
获取数据总数,计算页数和显示的数据以及偏移量
<?php
// 预定义变量$_GET,该数组存储的是get方式请求的数据
const PAGE_SIZE=2;
$page = 1;//默认为第一页
if (isset($_GET['page'])) {
$page = $_GET['page'];
}
// 计算记录总数
$sql = "select count(*) from user";
$result = $conn->query($sql);
$data = $result->fetch_row();//返回一个索引数组
$count=$data[0];//用记录数
// 取整函数(ceil,floor,round)
$page_count = ceil($count/PAGE_SIZE);
// page=1,$index=0;page=2,index=2;page=3,index=4
$index = ($page-1)*PAGE_SIZE;
$sql="select id,user,create_time from user limit $index," . PAGE_SIZE;
// echo $sql;
$result=$conn->query($sql);
?>
使分页数据初始化,对头部和尾部省略处理
<ul class="pager">
<?php if($page-1>0){ ?>
<li><a href="<?php echo $_SERVER['PHP_SELF'] ?>?page=<?php echo $page-1 ?>">上一页</a></li>
<?php } ?>
<?php if($page+1<=$page_count) { ?>
<li><a href="<?php echo $_SERVER['PHP_SELF'] ?>?page=<?php echo $page+1 ?>">下一页</a></li>
<?php } ?>
</ul>