php实现搜索界面
PHP 搜索界面实现方法
基础表单设计
创建一个简单的 HTML 表单用于接收用户搜索词,表单 method 建议使用 GET 以便保留搜索历史:
<form action="search.php" method="get">
<input type="text" name="keywords" placeholder="输入搜索关键词">
<button type="submit">搜索</button>
</form>
数据库查询处理
在 search.php 中处理搜索逻辑,使用预处理语句防止 SQL 注入:
if(isset($_GET['keywords'])) {
$keywords = trim($_GET['keywords']);
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM products
WHERE name LIKE :keywords
OR description LIKE :keywords");
$searchTerm = "%$keywords%";
$stmt->bindParam(':keywords', $searchTerm);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
结果展示页面
循环输出查询结果并高亮显示匹配关键词:
foreach($results as $item) {
echo '<div class="result-item">';
echo '<h3>'.preg_replace("/$keywords/i", "<mark>$0</mark>", $item['name']).'</h3>';
echo '<p>'.preg_replace("/$keywords/i", "<mark>$0</mark>", $item['description']).'</p>';
echo '</div>';
}
分页功能实现
添加 LIMIT 和 OFFSET 实现分页查询:
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$stmt = $db->prepare("SELECT * FROM products
WHERE name LIKE :keywords
LIMIT :offset, :perPage");
$stmt->bindParam(':keywords', $searchTerm);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
高级搜索功能
扩展表单支持多条件筛选:
<form action="search.php" method="get">
<input type="text" name="keywords" placeholder="关键词">
<select name="category">
<option value="">所有分类</option>
<option value="1">电子产品</option>
<option value="2">家居用品</option>
</select>
<input type="number" name="min_price" placeholder="最低价格">
<button type="submit">高级搜索</button>
</form>
AJAX 实时搜索
使用 jQuery 实现实时搜索建议:
$('#search-input').keyup(function(){
$.get('live_search.php', {query: $(this).val()}, function(data){
$('#suggestions').html(data);
});
});
搜索日志记录
记录用户搜索行为以便分析:
if(!empty($keywords)) {
$log = $db->prepare("INSERT INTO search_log
(keyword, ip_address, user_agent)
VALUES (?, ?, ?)");
$log->execute([
$keywords,
$_SERVER['REMOTE_ADDR'],
$_SERVER['HTTP_USER_AGENT']
]);
}






