老友记之PHP7留言板开发(分页)
2018-07-30 本文已影响0人
科科分享
之前查询留言记录的时候只是简单的记录输出,当留言人数多的时候怎么呢?一次性输出成千上百条记录是不现实的,第一用户体验差,第二影响服务器性能;所以这个时候就需要分页。
- 关键词:
LIMIT
,本节运用到的知识点还是之前的SQL查询语句,在第二步骤中我们只需要将查询记录的SQL语句改造一下。
<?php
// 查询所有id=3的记录
$sql = "SELECT * FROM feedback WHERE id = 3";
// 查询前10条记录
$sql = "SELECT * FROM feedback WHERE id = 3 LIMIT 0, 10";
相信大家已经看出有什么不同了。
效果图:
每页一条记录,总共2条记录,共2页完整代码:
<?php
include 'config.php';
$page = !empty($_GET['page'])?intval($_GET['page']):1;
$pagesize = 1;
// 统计总记录数,便于计算出总页数
$sql = "SELECT * FROM feedback";
$result = mysqli_query($mysqli, $sql);
$total = mysqli_affected_rows($mysqli);
$total_page = ceil($total/$pagesize); // 进一法取整获取总页数
// 开始分页查询,根据page计算偏移量
$offset = ($page - 1) * $pagesize;
$sql = "SELECT * FROM feedback LIMIT {$offset}, {$pagesize}";
$result = mysqli_query($mysqli, $sql);
$lists = array();
while($rows = mysqli_fetch_array($result)){
$lists[] = $rows;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>列表_留言板_科科分享</title>
<!-- 2.新建css样式文件并根据效果图编写css代码 -->
<link rel="stylesheet" href="feedback.css">
</head>
<body>
<!-- 工作区,呈现给用户看的 -->
<!-- 1.开始搭建脚手架 -->
<div class="container_box">
<div class="up">
<h3 class="title">留言板</h3>
<h5 class="subtitle">LIST</h5>
</div>
<div class="down list">
<ul>
<?php
foreach($lists as $item){
?>
<li>姓名:<?php echo $item['name']?> 联系方式:<?php echo $item['contact']?> 内容:<?php echo $item['content']?></li>
<?php
}
?>
</ul>
<div class="pages">
<ul>
<?php
for($p = 1; $p<=$total_page; $p++){
?>
<li <?php echo ($page == $p)?'class="active"':'';?>><a href="?page=<?php echo $p?>"><?php echo $p?></a></li>
<?php
}
?>
</ul>
</div>
</div>
</div>
</body>
</html>
config.php
<?php
$localhost = '127.0.0.1'; // 数据库地址
$user = 'root'; // 数据库用户名
$password = 'root'; // 数据库密码
$dbname = 'php_course'; // 数据库名
$mysqli = mysqli_connect($localhost, $user, $password, $dbname);
if(mysqli_connect_errno()){
echo '连接数据库失败:'.mysqli_connect_error();
exit;
}
mysqli_query($mysqli, "SET NAMES UTF8");
feedback.css新增分页样式
/* 分页 */
.pages{margin: 0 auto;}
.pages ul{list-style: none;}
.pages ul li{padding: 0 8px; border: 1px solid #e1e1e1;float: left;display: block;margin:0 4px;}
.pages ul li.active{background-color: #63637f;}
.pages ul li.active a{color: #fff;}
- 分页的要点在于计算总页码数及计算分页偏移量;
这里要说明一下的是偏移量(每一页的分界记录数),比如每页显示10条,那么第一页的偏移量就是0,第二页是10,第三页是20,以此类推;
得出公式就是(当前页数-1)* 每页显示记录数;
正如我们所看到的$offset = ($page - 1) * $pagesize;
-
值得注意的是三元运算符
echo ($page == $p)?'class="active"':'';
相当于if($page == $p){echo 'class="active"';}else{echo '';}
-
最后只需把查询出来的数据集输出展示出来了。还是那句话,如果想要掌握记得要动手试试,实践是验证真理的最好方法。如有什么讲解错误或者不明白的地方,欢迎留言!