PHP实现搜索与分页功能的完整代码示例
本文详细介绍PHP中实现搜索与分页功能的核心逻辑,涵盖动态查询条件的构建、总记录数的统计以及翻页链接的生成,并提供完整的代码结构供参考。
结果与目标
分页显示是将数据库中的大量结果集分段展示的一种常用方法。结合搜索功能时,系统需根据用户输入的关键词(如标题、关键字、作者)筛选数据,并在筛选后的结果集上进行分页展示。最终目标是让用户能够清晰地看到当前页的数据以及便捷的翻页导航。
准备条件
- 数据库表结构:假设存在一个名为
news的表,包含id(编号)、title(标题)、keywords(关键字)、author(作者)、addtime(日期)和content(内容)字段。 - 环境要求:运行PHP脚本的服务器环境。注意:传统教程中常用的
mysql_*系列函数已在PHP 7.0中被移除,实际生产环境中建议使用mysqli或PDO扩展。 - 基础逻辑:
- 获取总记录数:执行
SELECT COUNT(*)查询。 - 计算页码:根据每页条数
$pagesize和总记录数$totalnum计算最大页数$maxpage。 - 截取数据:利用SQL的
LIMIT offset, count语法获取当前页数据。
真实操作顺序
第1步:构建搜索条件与URL参数
目的:收集用户输入,形成WHERE子句及后续翻页时需要保留的查询参数。
在PHP中,首先检查GET请求中的参数。如果提供了搜索关键词,将其加入条件数组,并将该参数加入URL拼接数组,以便在翻页时保持搜索状态。
// 假设 $wherelist 存放 SQL WHERE 条件片段
// 假设 $urllist 存放 URL 参数片段
$wherelist = array();
$urllist = array();
if (!empty($_GET['title'])) {
// 注意:实际项目中请对输入进行转义或使用预处理语句防止SQL注入
$wherelist[] = "title LIKE '%" . $_GET['title'] . "%'";
$urllist[] = "title=" . urlencode($_GET['title']);
}
if (!empty($_GET['keywords'])) {
$wherelist[] = "keywords LIKE '%" . $_GET['keywords'] . "%'";
$urllist[] = "keywords=" . urlencode($_GET['keywords']);
}
if (!empty($_GET['author'])) {
$wherelist[] = "author LIKE '%" . $_GET['author'] . "%'";
$urllist[] = "author=" . urlencode($_GET['author']);
}
$where = "";
$url = "";
if (count($wherelist) > 0) {
$where = " WHERE " . implode(' AND ', $wherelist);
$url = '&' . implode('&', $urllist);
}
第2步:计算分页变量
目的:确定总共多少页,当前是第几页,以及当前页的数据起始位置和数量。
// 每页显示的记录数
$pagesize = 5;
// 1. 获取总记录数
$sql_count = "SELECT COUNT(*) FROM news {$where}";
// 执行查询并获取总数...
$totalnum = /* 获取到的总数 */;
// 2. 计算最大页数
$maxpage = ceil($totalnum / $pagesize);
if ($maxpage < 1) $maxpage = 1;
// 3. 获取当前页码,默认为1
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
if ($page < 1) $page = 1;
if ($page > $maxpage) $page = $maxpage;
// 4. 计算 LIMIT 的子句
// 起始位置 = (当前页 - 1) * 每页条数
$limit_start = ($page - 1) * $pagesize;
$limit_clause = "LIMIT {$limit_start}, {$pagesize}";
第3步:查询当前页数据并展示
目的:根据计算出的偏移量获取数据,并渲染HTML表格。
$sql_data = "SELECT * FROM news {$where} {$limit_clause}";
// 执行数据查询...
$res = /* 返回的结果集 */;
// 遍历结果集输出表格行
while ($row = mysqli_fetch_assoc($res)) { // 以mysqli为例
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['title']}</td>";
echo "<td>{$row['keywords']}</td>";
echo "<td>{$row['author']}</td>";
echo "<td>" . date("Y-m-d H:i:s", $row['addtime']) . "</td>";
echo "<td>{$row['content']}</td>";
echo "</tr>";
}
第4步:生成前端搜索表单与分页链接
目的:提供用户重新搜索的入口,以及首页、上一页、下一页、尾页的导航。
搜索表单部分:
<form action="searchpage.php" method="get">
标题:<input type="text" name="title" value="" size="8">
关键字:<input type="text" name="keywords" value="" size="8">
作者:<input type="text" name="author" value="" size="8">
<input type="button" value="查看全部" onclick="window.location='searchpage.php'">
<input type="submit" value="搜索">
</form>
分页链接部分:放在表格底部,注意拼接原有的搜索参数 $url。
<tr>
<td colspan="6">
<?php
echo "当前 {$page}/{$maxpage} 页 共 {$totalnum} 条";
echo " <a href='searchpage.php?page=1{$url}'>首页</a> ";
if ($page > 1) {
echo "<a href='searchpage.php?page=" . ($page - 1) . "{$url}'>上一页</a>";
} else {
echo "上一页";
}
if ($page < $maxpage) {
echo "<a href='searchpage.php?page=" . ($page + 1) . "{$url}'>下一页</a>";
} else {
echo "下一页";
}
echo " <a href='searchpage.php?page={$maxpage}{$url}'>尾页</a>";
?>
</td>
</tr>
完成判断
当页面正确显示了符合搜索条件的数据列表,且底部的“首页、上一页、下一页、尾页”链接点击后能正确切换数据并保持搜索条件不丢失时,即表示搜索加分页功能实现完毕。
原文有依据的排错与安全提醒
关于 mysql_* 函数的废弃: 原始草稿中使用的是 mysql_query 等函数。这些函数在 PHP 5.5.0 中已被废弃,并在 PHP 7.0.0 中被彻底移除。如果在现代 PHP 环境中直接运行原代码会报错。建议将连接和查询方式升级为 PDO 或 MySQLi,并确保 SQL 语句中使用预处理语句(Prepared Statements)来防御 SQL 注入攻击,特别是在拼接 LIKE 查询条件时。
简要总结
通过上述步骤,我们实现了基于PHP的动态搜索与分页功能。核心在于灵活构建SQL的WHERE条件和LIMIT子句,以及在URL中妥善传递分页和搜索参数。以上就是PHP实现搜索加分页功能的详细内容,更多关于PHP后端开发与数据库查询优化的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









