我有一个搜索表单来搜索产品。
<form method="get" action="search.php">
<select name="minprice">
<option value="">Min price</option>
<option value="100">100</option>
<option value="200">200</option>
<option value="300">300</option>
<option value="400">400</option>
<option value="500">500</option>
</select>
<select name="maxprice">
<option value="">Max price</option>
<option value="100">100</option>
<option value="200">200</option>
<option value="300">300</option>
<option value="400">400</option>
<option value="500">500</option>
</select>
<select name="type">
<option value="">type</option>
<option value="electric">electric</option>
<option value="other">other</option>
</select>
<select name="brand">
<option value="">type</option>
<option value="asus">ASUS</option>
<option value="ms">MS</option>
<option value="other">other</option>
</select>
<input type="submit" name="search" value="search">
</form>
在search.php
页面中,我只需要基于所选内容的结果。
如果我选择了单个列表,我只需要那个结果。
示例:我选择了min price
=100,那么我只需要选择最低价格为100的产品。。。
我尝试过这种方法,但在我的情况下并不容易,我相信还有另一种方法可以实现。
有专家吗??
非常感谢任何帮助/想法。。
编辑
if(isset($_GET['minprice'])
{
$minprice=$_GET['minprice'];
$query="SELECT * FROM products WHERE price>='$minprice'";
}
else if()....
{ }
我目前正在这样做,但在接下来的条件下不采取。。。
我的问题:
- 只有这样才能得到结果吗
- 对
$_GET['']
方法(如!=""
或empty()
)所需的任何更改
首先,将表单从get更改为post。虽然用户可以操作POST,但操作GET要容易得多。
<form method="post" action="search.php">
其次,首先评估所有POST变量,然后编写数据库查询。
$minprice = isset($_POST['minprice']) ? $_POST['minprice'] : null;
$maxprice = isset($_POST['maxprice']) ? $_POST['maxprice'] : null;
$type = isset($_POST['type']) ? $_POST['type'] : null;
$brand = isset($_POST['brand']) ? $_POST['brand'] : null;
注意:我不确定您使用的数据库类型,但在构建查询时,您应该使用带有这些变量的已准备好的语句。限制变量中可能的值也是一个好主意——例如,如果您希望price始终是一个十进制数字,则应该将字符串强制转换为float。
然后,您可以使用类似以下内容进行查询。我假设您使用的是mysql数据库。
"SELECT <columns> FROM products WHERE minprice >= ISNULL(<$minprice variable>,minprice) AND maxprice <= ISNULL(<$maxprice variable>,maxprice) AND type = ISNULL(<$type variable>,type) AND brand = ISNULL(<$brand variable>,brand)"
注意:需要更改上面的查询以处理参数绑定/准备语句。由于我不知道您的数据库风格,我已经为您提供了基本的查询结构。此外,您应该从表中选择所需的特定列,而不是SELECT *
(这会影响性能)。