根据PHP中选定的下拉菜单筛选搜索


Filter search based on selected drop downs in PHP

我有一个搜索表单来搜索产品。

<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()....
   {   }

我目前正在这样做,但在接下来的条件下不采取。。。

我的问题:

  1. 只有这样才能得到结果吗
  2. $_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 *(这会影响性能)。