根据PHP中选定的下拉列表过滤搜索

时间:2016-03-30 14:20:13

标签: php search get

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

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

我目前正在这样做,但在接下来的条件下没有采取......

我的问题:

  1. 只有这样才能得到结果吗?
  2. $_GET['']!=""empty()方法所需的任何更改。

1 个答案:

答案 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 *(这是性能损失)。