我有一个搜索表单来搜索产品。
<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的产品...
我尝试了this方法,但在我的情况下这并不容易,我相信还有另一种方法可以实现这一点。
任何专家??
任何帮助/想法非常感谢..
修改
if(isset($_GET['minprice'])
{
$minprice=$_GET['minprice'];
$query="SELECT * FROM products WHERE price>='$minprice'";
}
else if()....
{ }
我目前正在这样做,但在接下来的条件下没有采取......
我的问题:
$_GET['']
或!=""
等empty()
方法所需的任何更改。答案 0 :(得分:0)
首先,将表单从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;
注意:我不确定您使用的数据库类型,但在构建查询时应使用prepared statements这些变量。限制变量中的可能值也是一个好主意 - 例如,如果您希望价格始终为十进制数,则应将字符串转换为浮点数。
然后,您可以使用以下内容进行查询。我假设您正在使用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 *
(这是性能损失)。