如何实现分页功能

上一章节我们完成了后台的内容展示html页面的修改,这里就需要把数据库的数据通过SQL语句查询出来并在表中显示。这里使用分页功能来显示,毕竟第一页显示的数目是有限的。

所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

每页显示数量:$limitNews

获取当前的分页数:$page

由于计算机语言默认从0开始获取记录

如果设置每页显示数量为3,$limitNews = 3,

那么第一页 $page = 1 就会显示 0, 1, 2  三条记录

第二页 $page = 2 就会显示 3, 4, 5  三条记录

第三页 $page = 3 就会显示 6, 7, 8 三条记录

以此类推。。。。。。。。。

设置一个参数 $limitFrom 从第几条数据开始读取

从上面的规律就可以得到:

$limitFrom = ($page - 1) * $limitNews;

就会分别从第0 ,3, 6条开始获取数据。

通过查询语句获取数据库表中的新闻总数量$countNews

<?php
$retQuery = mysqli_query($link, $sqlCount);  //查询数量sql语句
$retCount = mysqli_fetch_array($retQuery);   //获取数量
$count = $retCount[0]?$retCount[0]:0;   //判断获取的新闻数量
$countNews = $count;
?>

这里需要给到另一个参数$countPage 总共显示多少页

现在就出现另一个问题,如果有10条新闻纪录,每页显示3条纪录,那剩余的一条怎么办?

我们就要使用%取余来进行判断:

<?php
$countPage = $countNews%$limitNews;   //求余数获取分页数量能否被除尽
if(($countPage) > 0) {  //获取的页数有余
  $countPage = ceil($countNews/$limitNews);  
  
// ceil() 函数向上舍入为最接近的整数,除不尽则取整数+1页, 10个新闻每个页面显示3个,成3个页面,剩余1个单独成1个页面,这样总共有4个页面
} else {
  $countPage = $countNews/$limitNews;  //如果是9个新闻每个页面显示3个,成3个页面
}
?>

其他参数上一页$prev,下一页$next;

在分页功能中经常会有点击“上一页”和点击“下一页”进行跳转

先说一下PHP代码功能实现思路:

上一页$prev,就是当前页$page -1 一步一步往前页跳转,当当前页$page为第一页的时候再往前跳转就为第0页了,这显然会出现bug,

这里我们就需要给它一个设定,当当前页$page为第一页的时候点击“上一页”就设定它显示为第一页,不在往前跳转了。

<?php
  $prev = ($page - 1 <= 0 )?1:$page-1;
?>

下一页$next, 就是当前页$page -1 一步一步往后页跳转,问题在于当$page为最后一页的时候点击“下一页”再往后跳转,

跟上一页类似,我们设定它就显示最后一页。

<?php
  $next = ($page + 1 > $countPage)?$countPage:$page+1;
?>

//当前页数要大于总页数的时候就显示当前页。

<!DOCTYPE html>
<html>
<head>  
<meta charset=utf8">  
<title>分表页</title>
</head>
<body>
   <div>
         <a href="?page=<?php echo $prev;?>">|上一页</a>         
         <?php for($i=1; $i<=$countPage; $i++):?>         
         <a href="?page=<?php echo $i;?>"><?php echo $i;?></a>         
         <?php endfor;?>         
         <a href="?page=<?php echo $next;?>">|下一页</a>
   </div>
</body>
</html>

朋友们可以在数据库 list 表中添加几条测试数据来测试分页功能。

用while语句循环出数据库中的数据并展示在 list.php文件中:

<?php while($rows=mysqli_fetch_array($result)):?>
<tr>
  <td style="text-align:left; padding-left:20px;">
  <input type="checkbox" name="id[]" value="<?php echo $rows["id"]?>" />
  <?php echo $rows["id"]?></td>
  <td><input type="text" name="sort[1]" value="1" style="width:50px; text-align:center; border:1px solid #ddd; padding:7px 0;" /></td>
  <td width="10%">
      <video width="200" height="150" controls="controls" >
          <source src="<?php echo $rows["video"]?>" type="video/mp4">
      </video>
  </td>
  <td><?php echo $rows["title"]?></td>
  <td><font color="#00CC99">首页</font></td>
  <td><?php echo $rows["cate_name"]?></td>
  <td><?php echo date("Y-m-d H:i:s",$rows["time"])?></td>
  <td>
      <div class="button-group">
          <a class="button border-main" href="#"><span class="icon-edit"></span>修 改</a>
          <a class="button border-red" href="#" onclick="return del(1,1,1)">
              <span class="icon-trash-o"></span>删 除
          </a>
      </div>
  </td>
</tr>
<?php endwhile;?>

注意:这里使用了 date函数对时间戳进行了转换,显示为正常的添加时间。

<?php echo date("Y-m-d H:i:s",$rows["time"])?>

继续学习
||
<!DOCTYPE html> <html> <head> <meta charset=utf8"> <title>分表页</title> </head> <body> <div> <a href="?page=<?php echo $prev;?>">|上一页</a> <?php for($i=1; $i<=$countPage; $i++):?> <a href="?page=<?php echo $i;?>"><?php echo $i;?></a> <?php endfor;?> <a href="?page=<?php echo $next;?>">|下一页</a> </div> </body> </html>
提交重置代码