MySQLi新闻分页案例

1 分页简介

当列表中的记录非常多时,为了方便查询,使用分页功能。

2 分页效果


3 分页原理

利用LIMIT关键字限制SELECT语句查询出的数据

SELECT * FROM news LIMIT 0,3;  # 查询第1页的3条数据
SELECT * FROM news LIMIT 3,3; # 查询第2页的3条数据

# 第1个参数与页码之间存在一定的数学关系。
# 第2个参数表示每次查询的最大条数。

# LIMIT第1个参数计算方式:LIMIT 第1个参数 = (页码 - 1) * 每页查询的条数

4 开发思路

定义变量:定义页码和查询条数变量。
查询总记录数:查询新闻表中的总记录数,计算出总页数。
计算LIMIT参数:根据当前页码计算出LIMIT的两个参数值,拼接查询语句。
分页导航:添加“首页”“上一页” “下一页”“末页”分页导航。
页码链接:当总页数小于或等于7时,显示所有的页码数。
页码链接:总页数大于7页、当前页小于等于5时,生成数字导航链接。
页码链接:总页数大于7页,当前页大于5时,生成数字导航链接。
显示分页:在页面中显示分页内容。

5 页码链接


6 具体实现

1)定义变量:定义页码和查询条数变量

$page = $_GET['page'] ?? 1;        // 当前页码
$pagecount = 4; // 每页显示的条数

2)查询总记录数:查询新闻表中的总记录数,计算出总页数

$count_sql = 'SELECT count(*) AS total FROM news';
$res = read($conn, $count_sql, $error);
$count = $res['total'] ?? 0;
$pages = ceil($count / $pagecount);

3) 根据页码计算LIMIT参数:计算LIMIT参数,替换查询语句

$offset = ($page - 1) * $pagecount;         // 计算分页的第1个参数值
$limit = " LIMIT $offset,$pagecount";
$sql = "SELECT n.*,a.name FROM news n LEFT JOIN author a
ON n.a_id=a.id ORDER BY n.id " . $limit;
$news = read($conn, $sql, $error, true);

4)分页导航:添加“首页”“上一页” “下一页”“末页”分页导航

$pageinfo = '';
$pageinfo .= "<a href=\"index.php?page=1\">首页</a>";
if ($page != 1) {
$prev = $page - 1;
$pageinfo .= "<a href=\"index.php?page={$prev}\">上一页</a>";
}
// (在此处添加具体页码)……
if ($page != $pages) {
$next = $page + 1;
$pageinfo .= "<a href=\"index.php?page={$next}\">下一页</a>";
}
$pageinfo .= "<a href=\"index.php?page={$pages}\">末页</a>";

5)页码链接1:当总页数小于或等于7时,显示所有的页码数

if ($pages <= 7) {
for ($i = 1; $i <= $pages; $i++) {
if ($page == $i) {
$pageinfo .= “<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
} else {
// (在此处添加页码大于7的代码)……
}

6)页码链接2:总页数大于7页、当前页小于等于5时,生成数字导航链接

if ($page <= 5) {
for ($i = 1; $i <= 7; $i++) {
if ($page == $i) {
$pageinfo .= "<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
$pageinfo .= "<a href=\"javascript:return false;\" onclick=\"return false;\">...</a>";
} else {
// (在此处添加当前页大于5的代码)……
}

7)根据页码计算LIMIT参数:总页数大于7页,当前页大于5时,生成数字导航链接

$pageinfo .= "<a href=\"index.php?page=1\">1</a>";
$pageinfo .= "<a href=\"index.php?page=2\">2</a>";
$pageinfo .= "<a href=\"javascript:return false;\" onclick=\"return false;\">...</a>";
if ($page > $pages - 3) {
for ($i = $pages - 4; $i <= $pages; $i++) {
if($page == $i){
$pageinfo .= "<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
} else {
…… (见下一页)
}

8)根据页码计算LIMIT参数:总页数大于7页,当前页大于5时,生成数字导航链接

for ($i = $page - 2; $i <= $page + 2; $i++) {
if ($page == $i) {
$pageinfo .= "<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
$pageinfo .= "<a href=\"javascript:return false;\" onclick=\"return false;\">...</a>";

9)显示分页:在页面中显示分页内容

<div class="page">
<?php echo $pageinfo;?>
</div>

注意:封装的函数在这里

相关推荐

  • 获取指定目录下的所有图片信息

    1 获取指定目录下的所有图片信息// 获取指定目录下的所有图片信息 public function getImagesInfo($directory) { $images = []; // 创建递归目录迭代器 $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY ); // 遍历目录中的每个文件 foreach (

  • Thinkphp各版本的PHP要求

    ThinkPHP 8.0:运行环境要求PHP8.0+,兼容PHP8.3ThinkPHP 6.1:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 6.0:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 5.1:运行环境要求PHP5.6+,兼容PHP8.0ThinkPHP 5.0:运行环境要求PHP5.4+,兼容PHP7.3

  • Thinkphp5.1路径常量

    1 配置文件位置根目录/config/template.php2 配置文件内容&lt;?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reser

  • Thinkphp5.0路径常量

    1 配置文件位置根目录/application/模块名/config.php2 配置文件内容&lt;?php//配置文件return [ // 后台视图输出字符串内容替换 'view_replace_str' =&gt; [ '__PUBLIC__' =&gt; '/', '__STATIC__' =&gt; '/static', '__CONSOLE__' =&gt; '/static/console', '__CONSOLE_CSS__' =&gt; '/static/console/css', '__CONSOLE_IMAGES__' =&gt; '/static/console/ima

  • wp站点防止别人进行DDOS攻击

    1 简介wp站点防止别人进行DDOS攻击。2 配置位置位置:根目录/wp-config.php3 配置内容在【根目录/wp-config.php】文件的开头添加如下代码:if(strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false){ $protocol = $_SERVER['SERVER_PROTOCOL'] ?? ''; if(!in_array($protocol, ['HTTP/1.1', 'HTTP/2', 'HTTP/2.0', 'HTTP/3'], true)){ $protocol = 'HTTP/1.0'; } hea

  • 只读属性

    1 只读属性简介只读属性的声明方式类似于普通属性,但需要使用 readonly 关键字。2 只读属性例子class Point { public readonly float $x; public readonly float $y; public function __construct(float $x, float $y) { $this-&gt;x = $x; $this-&gt;y = $y; }}$point = new Point(3.5, 2.8);echo $point-&gt;x; // 输出: 3.5echo $point-&gt;y; // 输出: 2.8// 下面的尝