问题
我在筛选我的表格时遇到了问题,我已经根据产品类别对其进行了筛选,但在查看数字时我不确定如何进行筛选。
预期结果
当用户按下提交按钮时,我希望看到的是表更改为以前提交的表。例如,在下拉框中有一个"低于1英镑"的选项,这意味着价格范围低于1英镑。如果我按下这个键,我希望看到表格发生变化,只显示价格低于1英镑的产品。
这是代码
下拉菜单
<form action="database.php" method="post">
<select name="price" id="price">
<option value="">All Products</option>
<option value="1">Less than £1</option>
<option value="2">More than £1, Less than £5</option>
<option value="3">More than £5, Less than £10</option>
</select>
<input type="submit" name="submit" value="Search"/>
</form>
表中与此相关的代码
if (!empty($_POST['price'])) {
// Where conditional that will be used in the SQL query
$where = " WHERE price = '".pg_escape_string($_POST['price'])."'";
switch ($_POST['price']) {
case 1:
$where = $where." and Price BETWEEN 0.00 AND 1.00";
break;
case 2:
$where = $where." and Price BETWEEN 1.00 AND 5.00";
break;
case 3:
$where = $where." and Price BETWEEN 5.00 AND 10.00";
break;
default:
break;
}
}
当我按下其中一个选项时会发生什么
例如,如果我选择"低于1英镑"选项,则只显示价值1英镑的产品。如果我选择"大于1英镑,小于5英镑"选项,则只显示价值2英镑的产品等。我理解它,因为我已将值设置为1、2和3。有办法绕过这个吗?
初始化WHERE
子句时,您将从下拉列表中设置price
列和value
之间的精确匹配,因此您最终会得到类似的结果
SELECT ...
WHERE price = '2'
AND price BETWEEN 1.00 AND 3.00...
将代码更改为设置$where = 'WHERE 1 = 1 ';
,以创建一个始终真实的基本WHERE,您可以安全地扩展它,如
SELECT ...
WHERE 1 = 1
AND price BETWEEN 1.00 AND 3.00...
希望能有所帮助。
之前,您将$where设置为的switch语句
$where = " WHERE price = '".pg_escape_string($_POST['price'])."'";
对于谈话,这将使$where等于
" WHERE price = '1'"
然后,在您的交换机中,您添加到当前位置,如果价格为1,$where最终等于
" WHERE price = '1' and Price BETWEEN 0.00 AND 1.00"
这会产生冲突,你所需要做的就是修改你的代码,删除你设置$where等于的第一件事,并像这样修改你的开关:
if (!empty($_POST['price'])) {
switch ($_POST['price']) {
case 1:
$where = " WHERE price BETWEEN 0.00 AND 1.00";
break;
case 2:
$where = " WHERE price BETWEEN 1.00 AND 5.00";
break;
case 3:
$where = " WHERE price BETWEEN 5.00 AND 10.00";
break;
default:
break;
}
}