php实现筛选功能实现
PHP 筛选功能实现
数据库查询筛选
使用 SQL 的 WHERE 子句结合用户输入构建查询条件。通过预处理语句防止 SQL 注入。
$category = $_GET['category'] ?? '';
$price_min = $_GET['price_min'] ?? 0;
$price_max = $_GET['price_max'] ?? 9999;
$sql = "SELECT * FROM products WHERE 1=1";
$params = [];
if (!empty($category)) {
$sql .= " AND category = ?";
$params[] = $category;
}
if ($price_min > 0) {
$sql .= " AND price >= ?";
$params[] = $price_min;
}
if ($price_max < 9999) {
$sql .= " AND price <= ?";
$params[] = $price_max;
}
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
表单设计
创建 HTML 表单收集筛选条件,使用 GET 方法提交以便保留筛选参数在 URL 中。
<form method="get" action="products.php">
<select name="category">
<option value="">所有分类</option>
<option value="electronics">电子产品</option>
<option value="clothing">服装</option>
</select>
<input type="number" name="price_min" placeholder="最低价格">
<input type="number" name="price_max" placeholder="最高价格">
<button type="submit">筛选</button>
</form>
数组数据筛选
对于非数据库数据,可以使用 array_filter 函数实现筛选。
$products = [
['name' => 'Laptop', 'category' => 'electronics', 'price' => 1200],
['name' => 'T-Shirt', 'category' => 'clothing', 'price' => 20]
];
$filtered = array_filter($products, function($item) {
$match = true;
if (isset($_GET['category']) && $_GET['category'] !== ''
&& $item['category'] !== $_GET['category']) {
$match = false;
}
if (isset($_GET['price_min']) && $item['price'] < $_GET['price_min']) {
$match = false;
}
return $match;
});
分页处理
结合筛选实现分页功能,计算总记录数和分页参数。
$page = $_GET['page'] ?? 1;
$per_page = 10;
$offset = ($page - 1) * $per_page;
$count_sql = "SELECT COUNT(*) FROM products WHERE 1=1" . $where_clause;
$total = $pdo->query($count_sql)->fetchColumn();
$total_pages = ceil($total / $per_page);
$sql .= " LIMIT $offset, $per_page";
结果展示
在页面中显示筛选结果和分页导航。
foreach ($results as $product) {
echo "<div>{$product['name']} - {$product['price']}</div>";
}
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='?page=$i&category={$_GET['category']}'>$i</a> ";
}
通过以上方法可以实现完整的筛选功能,包括数据库查询、表单处理、分页和结果显示。确保对用户输入进行验证和过滤以保证安全性。







