批改状态:合格
老师批语:是不是发现, 一个看上去很简单的功能, 其实内部隐藏了大量的细节 , 实现起来并不简单呢?
总结:
首先需要知道所读数据的总数,以及每页的条数(数据偏移量),以及当前的页数;
当读取有数量比较多时,就需要分页显示;
分页时,以当前页为中心,设置左右偏移量,当前页在前面或后面时,显示2倍偏移量+1页;
当前页小于偏移量,或者当前页到最大页数时,注意要控制好起始页不能小于1,最大页不能大于总页数;
<?php//1) 链接数据库// phpinfo();require ('../cms/inc/pdoconnet.php');// 2)要使用分页,需要知道所读数据的总数,以及每页的条数,即就是偏移量,以及当前的页数;// 当前的页数是从浏览器上传入,如果没有传入就默认为1;$page=$_GET['p'] ?? 1 ;// 每月的条数可以自定义,5$num=5;// 要读的数据总量$pages=$pdo->query("select CEIL(count(id)/{$num}) as total from T_user ")->fetch()['total'];// echo "当前页 {$page},每页显示数量 {$num},总页数 {$pages}";// 3)开始读出数据$sql="select * from T_user order by id asc limit {$num} offset ".$num*($page-1);$users=$pdo->query($sql)->fetchAll();// printf('<pre>%s</pre>',print_r($users,true));// 输出查询结果// 样式表$stru='<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="style.css"></head><body>';$stru.='<table><tr><th>ID</th><th>Name</th><th>Sex</th><th>Tel</th><th>Date</th><th>CURD</th>';// 在这里插入数据foreach ($users as $user){$stru.="<tr><td>{$user['ID']}</td><td>{$user['username']}</td><td>".($user['sex']? '男' : '女')."</td><td>{$user['mtel']}</td><td>".$user['regtime']."</td>";$stru.="<td><a href=''>删除</a></td>";}$stru.='</table><p>';echo $stru;// 分页开始$prev = $page - 1;if ($page == 1) $prev = 1;$next = $page + 1;if ($page == $pages) $next = $pages;// ----------设置偏移量,重置起始和结束页$pageoffset=2;// 如果总页数大于2倍偏移+1,则需要隐藏多出来的if ($pages>($pageoffset*2+1)){// 如果当前页大于偏移,说明有页数可以隐藏if (($page-$pageoffset)>0){// 如果总页数减当前页大于偏移量,说是前面、后面有页码可以隐藏,即就是以当前页+前后偏移量if ($pages-$page>$pageoffset){$startpage=($page-$pageoffset);$endpage=($page+$pageoffset);}// 总页数减当前页不大于偏移量,说是后面不需要隐藏,起始页就是总页数减去2倍偏移量else{$startpage=($pages-$pageoffset*2);$endpage=$pages;}}// 当前页不大于偏移量,说明前面不需要隐藏,结束页就是2倍偏移+1页,后面的隐藏else{$startpage=1;$endpage=($pageoffset*2+1);}}// 总页数不大于2倍偏移+1,前后都无需要隐藏else{ $startpage=1;$endpage=$pages;}$strp = "<a href='?p=1'>首页</a><a href='?p={$prev}'>前一页</a><a href='#'>...</a>";for ($i=$startpage; $i<=$endpage; $i++){$active= ($page==$i) ? 'active' : null;$strp.= "<a href='?p={$i}' class='{$active}'>{$i}</a>";}$strp.= "<a href='#'>...</a><a href='?p={$next}'>下一页</a><a href='?p={$pages}'>尾页</a>";echo $strp;?></p></body></html>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号