php留言板功能做完后,还存在一个问题,就是留言数量变多后,需要鼠标滚动很长的一段距离,这样用户体验不好,所以决定新增加一个功能:
翻页。
我们需要分析一下怎么实现这样一个功能。
需求点很明确,每页显示五条一级数据。
具体分析包含了下面三个方面:
要取出所有一级数据,也就是所有fid=0
的数据。
页数 = 取出的所有数据数 / 每页显示的条数。
不能整除的时候,比如说24条数据,24/5得到的数据我们需要向上取整,也就是显示5页。
这一步关键就是考验sql语句的使用,筛选特定的数据进行显示。
$sql_getall = "select * from comments where fid=0";
首先我们要取出所有fid=0的数据,也就是一级数据,拿出来它才能计算出所需要的页数。
$DB = new mysql("192.168.0.105", 'root', "111111", "mjdb", "conn", "utf8");
$DB->longquery($sql_getall);
$rs_all = $DB->get_assoc_result();
$total_num = count($rs_all);
变量$total_num中存放的就是取出的数据条数。
$total_page = ceil($total_num/5);
这里用到了向上取整的方法ceil( )
,$total_num是刚刚取出的数据量,5是控制每页显示的数量,这就得出了一共需要的页数。
数据取出来,页数也算出来了,剩下的就是要实现怎么在每一页只显示5条数据。
$sql_getfive = "select * from comments where fid = 0 limit ".$page_list_from.",5";
这句sql的意思就是从comments表中选择fid为0的数据,并且要从第n页开始取5条数据。
注意这里有一个变量$page_list_from
,这表示的是第几页的取数据,也就是页数。
$page_list_from = ($page-1)*5;
到这里我们数据差不多也都取出来了,现在需要将它显示到页面中。
依然要用到递归,不过这里的递归和不加分页的几乎一模一样,也就多加了一个$page
参数而已。
f($rows>0){
$dep++;
for ($i=0; $i < $dep; $i++) {
$str .= "--------";
}
for ($i=0; $i < $rows ; $i++) {
echo $str.$rs_five[$i]['comments']."'<a href='oper.php?action=del&page=".$page."&id=".$rs_five[$i]['id']."'>删除</a>
<a href='comments.php?page=".$page."&id=".$rs_five[$i]['id']."'>reply</a><br>";
echo go($rs_five[$i]['id'], $dep);
}
}
在url跳转的时候,也需要将$page
参数同时传递,不然会引起页面跳转错乱。
说了半天,也没有提到分页导航怎么弄,主要就是通过列表里加链接的方式,根据页数循环出来,
echo "<div class='pager'><ul>";
for ($i=1; $i < $total_page+1; $i++) {
echo "<li><a href='comments.php?page=".$i."'>".$i."</a></li>";
}
echo"</ul></div>";
相关文章推荐: