数据分页概述
对大量数据进行分页显示是 Web 开发中最常见的情况,但大多刚开始接触 Web 开发的开发人员,对分页技术往往比较迷惘,下面用注册用户信息的数据为例来演示一下 PHP 中基本的数据分页显示原理。
数据准备
|id | user | pwd
|1 | 小张 | 123
|2| 小李 | 345
|3 | 小王| 123
|4 | 小孙 | 345
|5 | 张三 | 123
|6 | 李四 | 345
数据库准备
CREATE TABLE `student` (
id int(100) NOT NULL primary key auto_increment,
user varchar(50) NOT NULL '',
pwd varchar(100) NOT NULL ''
)
分页原理
目的很简单,就是将较多数据记录,分页显示出来,每一页显示设定的数据条数。
PHP 分页技术核心在于确定当前的页数,然后利用 MySQL 的 LIMIT 关键字来指定输出对应的记录数。
如当前是第 1 页时,那么就是 LIMIT 0,4(假设一页输出 4 条记录),第 2 页时,就是 LIMIT 4,4,第 3 页时,就是 LIMIT 8,4 … 依此类推,第 n 页时,就是 LIMIT (n-1)*4,4 。
而当前页数 $p 这个参数,通过 URL 来获取。
数据库链接
$mysqli = @new mysqli("localhost",'root','','myschool');
if($mysqli ->connect_error){
// show_error('连接数据库失败','register.html');
die('连接数据库失败'.$mysqli->connect_error);
}
获取上一页,下一页的php代码
<?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 } ?>
完整代码
<?php
//设置北京时间
date_default_timezone_get('PRC');
//预定义变量$_GE,该数组存储的是以get方式请求的数据
// print_r($_GET);
const PAGE_SIZE =2;//每页多少条记录
$page = 1;//默认为第1页
if(isset($_GET['page'])){
$page = $_GET['page'];
}
// echo $page;
// exit;
$conn = @new mysqli('localhost','root','','myschol');
if($conn ->connect_error){
die('连接数据库失败');
}
//设置编码格式
$conn->set_charset('utf8');
//计算记录总数
$sql = "select count(*) from user";
$result = $conn->query($sql);
$date =$result->fetch_row();
$count = $date[0];//总记录 10
//总页数 取整数(ceil,floor,)
$page_count =ceil($count/PAGE_SIZE);
echo $page_count;
//page=1,$index=0;page=2,$index=2;page=3,$index=4;
$index=($page-1)*PAGE_SIZE;
$sql="select id,user,pwd,create_time from user limit $index,".PAGE_SIZE;
echo $sql;
$result = $conn ->query($sql);
$arr =[];
while($row = $result -> fetch_assoc()){
$arr[]=$row;
}
$result ->free();
$conn->close();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="./bootstrap-3.3.7-dist/css/bootstrap.min.css">
<script type="text/javascript" src="./bootstrap-3.3.7-dist/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="./bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">用户列表</div>
<table class="table table-bordered table-striped table-hover">
<tr>
<th>jjj</th>
<th width="250">创建日期</th>
</tr>
<?php foreach($arr as $row){?>
<tr>
<td><?php echo $row['user'] ?></td>
<td><?php echo date('Y-m-d H:i:s',$row['create_time']) ?></td>
</tr>
<?php } ?>
<tr>
<td>ddd</td>
<td>2016-06-28</td>
</tr>
</table>
<nav aria-label="...">
<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>
</nav>
</div>
</div>
</body>
</html>