批改状态:未批改
老师批语:
使用 mysqli 进行分页数据查询,实现上一页、下一页、中间页码、以前下拉框自选页码查询分页数据,实现分页有以下几点
/**
* 1. LIMIT 0,5 参数的作用: 偏移量与显示数量
* 2. 如何控制每页显示的数量
* 3. 接收GET参数,用p表示当前页数,每页显示5条
* 4. 当前偏移量的计算公式: (页数-1)*每页显示的数量
* offset = (page-1)*num
*/
分页效果:

具体实现如下:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>分页查询</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<?php
//导入分页函数库
require '../lib/func_page.php';
//连接数据库
$db = mysqli_connect('127.0.0.1','root','root','php');
//获取请求的页数
$page = isset($_GET['p'])?$_GET['p']:1;
//$offset = ($page-1)*5;
$num=5; //每页显示的数量
$table = 'staff'; //要查询的表
//$sql = "SELECT * FROM staff LIMIT {$offset},{$num};";
//$res = mysqli_query($db,$sql);
//$rows = mysqli_fetch_all($res,MYSQLI_ASSOC);
//获取总页数分2步:1.获取总记录数,2.再除以每次的显示数量,结果向上取整
//$number = mysqli_query($db,"SELECT COUNT(*) FROM staff");
//list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中
//$pages = ceil($total / $num); //获取到总页数 $pages
//执行函数库中的方法,并处理返回的数据
$data = func_page($db,$table,$page,$num);
$rows = $data['rows'];
$pages=$data['pages'];
//上一页
$lpages=(($page-1)==0)? 1 : ($page-1);
//下一页
$rpages=(($page+1)>$pages)?$pages:($page+1);
?>
<table>
<caption>信息表</caption>
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>工资</th>
</tr>
<!--使用循环得到查询处理过后的数据-->
<?php foreach ($rows as $row) :?>
<tr>
<td><?php echo $row['staff_id']?></td>
<td><?php echo $row['name']?></td>
<td><?php echo $row['sex']==0?'男':'女'?></td>
<td><?php echo $row['age']?></td>
<td><?php echo $row['salary']?></td>
</tr>
<?php endforeach; ?>
</table>
<div class="pages">
<p>
<a href="http://127.0.0.1/4027/index.php?p=1">首页</a>
<a href="http://127.0.0.1/4027/index.php?p=<?php echo $lpages ?>">上一页</a>
<!--循环列出中间部分的页码-->
<?php for ($i=1; $i<=$pages; $i++) :?>
<!--将中间显示的页码实现高亮-->
<a class="<?php if($page==1) echo ''; else if($page==$i) echo 'heigh'?>" href="http://127.0.0.1/4027/index.php?p=<?php echo $i ?>"><?php echo $i?></a>
<?php endfor; ?>
<a href="http://127.0.0.1/4027/index.php?p=<?php echo $rpages ?>">下一页</a>
<a href="http://127.0.0.1/4027/index.php?p=<?php echo $pages ?>">尾页</a>
</p>
<form action="" id="change_page">
第
<select name="p" id="sp" onchange="Change()">
<?php for ($i=1; $i<=$pages; $i++): ?>
<option value="<?php echo $i?>" <?php if($_GET['p']==$i)echo 'selected' ?>><?php echo $i?></option>
<?php endfor; ?>
</select>
页
<button>跳转</button>
</form>
</div>
<script type="text/javascript">
//给下拉列表添加 submit 事件实现选中跳转页面
function Change(){
var change_page =document.getElementById('change_page')
change_page.submit()
}
</script>
</body>
</html>Page分页函数封装部分:
<?php
/**
* Created by PhpStorm.
* User: John
* Date: 2018/5/2
* Time: 1:00
*/
//分页函数封装
if(!function_exists('func_page')){
function func_page($db,$table,$page,$num)
{
$offset = ($page-1)*5; //显示当前第几页的数据
$sql = "SELECT * FROM staff LIMIT {$offset},{$num};"; //查询数据SQL
$res = mysqli_query($db,$sql); //得到查询的数据结果集
$rows = mysqli_fetch_all($res,MYSQLI_ASSOC); //处理结果集,设置显示的结果模式
//获取总页数分2步:1.获取总记录数,2.再除以每次的显示数量,结果向上取整
$number = mysqli_query($db,"SELECT COUNT(*) FROM staff");
list($total) = mysqli_fetch_row($number); //总记录数保存到变量$total中
$pages = ceil($total / $num); //获取到总页数 $pages
//返回分页的数据跟总页数量
return ['rows'=>$rows,'pages'=>$pages];
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号