php实现筛选功能实现
实现PHP筛选功能
PHP实现筛选功能通常涉及前端表单提交、后端数据处理以及数据库查询。以下是几种常见筛选功能的实现方法:
表单设计
创建HTML表单用于用户输入筛选条件,例如:
<form method="GET" action="filter.php">
<input type="text" name="keyword" placeholder="关键词">
<select name="category">
<option value="">所有分类</option>
<option value="1">分类1</option>
<option value="2">分类2</option>
</select>
<input type="number" name="min_price" placeholder="最低价">
<input type="number" name="max_price" placeholder="最高价">
<button type="submit">筛选</button>
</form>
后端处理
在filter.php中接收并处理筛选参数:

$keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : '';
$category = isset($_GET['category']) ? intval($_GET['category']) : 0;
$minPrice = isset($_GET['min_price']) ? floatval($_GET['min_price']) : null;
$maxPrice = isset($_GET['max_price']) ? floatval($_GET['max_price']) : null;
数据库查询
构建动态SQL查询语句:
$sql = "SELECT * FROM products WHERE 1=1";
$params = [];
if (!empty($keyword)) {
$sql .= " AND (name LIKE ? OR description LIKE ?)";
$params[] = "%$keyword%";
$params[] = "%$keyword%";
}
if ($category > 0) {
$sql .= " AND category_id = ?";
$params[] = $category;
}
if ($minPrice !== null) {
$sql .= " AND price >= ?";
$params[] = $minPrice;
}
if ($maxPrice !== null) {
$sql .= " AND price <= ?";
$params[] = $maxPrice;
}
// 使用PDO预处理执行查询
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
AJAX实现动态筛选
使用jQuery实现无刷新筛选:

$('#filter-form').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: 'filter.php',
type: 'GET',
data: $(this).serialize(),
success: function(data) {
$('#results-container').html(data);
}
});
});
多条件组合筛选
对于复杂筛选需求,可以构建更灵活的条件数组:
$conditions = [];
$params = [];
if (!empty($keyword)) {
$conditions[] = "(name LIKE ? OR description LIKE ?)";
$params[] = "%$keyword%";
$params[] = "%$keyword%";
}
if ($category > 0) {
$conditions[] = "category_id = ?";
$params[] = $category;
}
$sql = "SELECT * FROM products";
if (!empty($conditions)) {
$sql .= " WHERE " . implode(" AND ", $conditions);
}
日期范围筛选
添加日期范围筛选功能:
$startDate = isset($_GET['start_date']) ? $_GET['start_date'] : null;
$endDate = isset($_GET['end_date']) ? $_GET['end_date'] : null;
if ($startDate && $endDate) {
$sql .= " AND created_at BETWEEN ? AND ?";
$params[] = $startDate;
$params[] = $endDate;
}
分页处理
结合分页实现大数据量筛选:
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$countSql = "SELECT COUNT(*) FROM ($sql) AS total";
$stmt = $pdo->prepare($countSql);
$stmt->execute($params);
$total = $stmt->fetchColumn();
$sql .= " LIMIT $perPage OFFSET $offset";
以上方法可以根据实际需求组合使用,构建完整的筛选功能系统。






