在以下课程中:
《直播实录:PHP魔鬼训练营[从零开始制作个人博客]》
——第5章 5-2[实例]如何使用PHP实现完美分页
https://www.php.cn/code/20774.html
老师讲的案例,存在bug:
?p=1时,page=1 有bug 点击下一页 page 会等于3 加了两次1
下面是我的解决方案:把下一页的$aa-1改为$bb-1
$conn=mysqli_connect ('localhost','root','root','tjl'); //函数连接到数据库对象
$aa=isset($_GET['p']) ? $_GET['p'] : 0;
$bb=isset($_GET['p']) ? $_GET['p'] : 0;
$offset=$aa* 3; //计算显示偏移量,3是每页显示的数量
$sql = "SELECT id, name, course FROM student LIMIT {$offset},3 ";
$select = mysqli_query($conn,$sql); // 执行查询语句返回结果集对象(数据表)
$rows=mysqli_fetch_all($select,MYSQLI_ASSOC); // 一次性获取全部记录行数结果集
foreach($rows as $key=>$value){ // 遍历二维数组,输出子数组的元素值
echo 'id:'. $value['id'] . ',姓名:' . $value['name'] . ',课程:' . $value['course'] . '<br />';
}
$sql2 = "SELECT * FROM student"; // sql语句为查询全部数量的结果集(整张数据表)
$select2 = mysqli_query($conn,$sql2); // 执行sql语句
$page=mysqli_num_rows($select2)/3; //3.3,展示的总页数=数据的总条/行数 除以一页展的3条数
$num=floor($page); //总页数3.3向下取整数为3
if($aa<=0){ // 限制上一页bb不要退到-0
$aa=$aa+1; } // 如果上一页bb为0,让它自加1,就保持继续点击上一页,bb不会小于0
if($bb>=$num){ // 限制下一页cc不要大于总页数num3
$bb=$bb-1; } // 如果下一页cc加到3,让它自减1,就保持继续点击下一页,cc不会增长
echo '<a href="?p=' . ($aa-1) . ' ">上一页</a>';
for($i=0; $i<=$num; $i++){
echo ' <a href="?p=' . ($i) . ' ">' .( ($i)+1 ). '</a> '; }
echo '<a href="?p=' . ($bb+1) . ' ">下一页</a>';
数据库学生表如下:
(把下面代码复制到 student.sql 文件导入数据库student表中即可)
INSERT INTO `student` (`id`, `name`, `course`) VALUES
(1, '唐建林', '化学'),
(2, '黄蓉', 'php'),
(3, '大唐', 'javascript'),
(4, '李3明', '物理'),
(5, '林3欢', 'css3'),
(6, '李明', 'html'),
(7, '李明', 'html'),
(8, '1李明', '1html'),
(9, '2李明', '22tml'),
(10, '老顽童', 'mysql');