在PHP开发过程中,分页显示搜索内容是一个常见的需求,那么如何实现按搜索内容分页的功能呢?下面我将详细为大家介绍一种实现方法。
我们需要一个用于显示搜索结果的页面,这里我们以“search.php”为例,在该页面中,我们需要接收两个参数:一个是搜索关键字,另一个是当前页码。
接收参数
在search.php页面中,我们可以通过GET方法接收搜索关键字和当前页码。
$keyword = $_GET['keyword']; // 搜索关键字 $page = $_GET['page'] ? $_GET['page'] : 1; // 当前页码,默认为1
查询数据
我们需要根据搜索关键字和当前页码查询数据,这里以MySQL数据库为例,使用PDO进行数据库操作。
// 数据库连接参数
$host = 'localhost';
$dbname = 'test';
$user = 'root';
$pass = '123456';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 查询总记录数
$sql_total = "SELECT COUNT(*) FROM article WHERE title LIKE :keyword";
$stmt_total = $pdo->prepare($sql_total);
$stmt_total->execute(array(':keyword' => "%$keyword%"));
$total = $stmt_total->fetchColumn();
// 计算每页显示的记录数和总页数
$pageSize = 10; // 每页显示10条记录
$totalPages = ceil($total / $pageSize);
// 查询当前页数据
$sql = "SELECT * FROM article WHERE title LIKE :keyword ORDER BY id DESC LIMIT :start, :pageSize";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':keyword', "%$keyword%", PDO::PARAM_STR);
$stmt->bindValue(':start', ($page - 1) * $pageSize, PDO::PARAM_INT);
$stmt->bindValue(':pageSize', $pageSize, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("数据库连接失败:" . $e->getMessage());
}
显示数据
查询到数据后,我们可以将结果遍历输出到页面上。
foreach ($result as $row) {
echo "<div>" . $row['title'] . "</div>";
}
分页导航
我们需要添加分页导航,方便用户跳转到其他页面。
// 上一页
$prevPage = $page - 1 > 0 ? $page - 1 : 1;
echo "<a href='search.php?keyword=$keyword&page=$prevPage'>上一页</a>";
// 显示页码
for ($i = 1; $i <= $totalPages; $i++) {
if ($i == $page) {
echo "<span>$i</span>";
} else {
echo "<a href='search.php?keyword=$keyword&page=$i'>$i</a>";
}
}
// 下一页
$nextPage = $page + 1 <= $totalPages ? $page + 1 : $totalPages;
echo "<a href='search.php?keyword=$keyword&page=$nextPage'>下一页</a>";
这样,一个简单的按搜索内容分页的功能就实现了,需要注意的是,这里仅提供了核心代码,实际项目中还需要考虑诸多因素,如:数据验证、安全性、性能优化等,希望这个示例能对您有所帮助,如有疑问,请随时提问。

