分页
总结:
首先需要知道所读数据的总数,以及每页的条数(数据偏移量),以及当前的页数;
当读取有数量比较多时,就需要分页显示;
分页时,以当前页为中心,设置左右偏移量,当前页在前面或后面时,显示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>