我正在尝试使用PHP过滤和显示mysql中的数据。下面是我的输入过滤器。
<form id="search_form">
<div class="well">
<h4 class="text-info">Search by Size</h4>
<input value="32" class="sort_rang" name="size[]" value="New" type="checkbox"> 32
<input value="36" class="sort_rang" name="size[]" value="fashion" type="checkbox"> 36
<input value="38" class="sort_rang" name="size[]" value="New" type="checkbox"> 38
</div>
<div class="well">
<h4 class="text-info">Search by price</h4>
<input value="950" class="sort_rangn" name="price[]" value="New" type="checkbox"> 950
<input value="1024" class="sort_rangn" name="price[]" value="fashion" type="checkbox"> 1024
<input value="500" class="sort_rangn" name="price[]" value="New" type="checkbox"> 500
</div>
</form>
现在我们有两个过滤器,大小和价格都取在数组中,并在mysql中搜索。
$sql="SELECT * FROM products";
extract($_POST);
if(isset($size))
$sql.=" WHERE size IN (".implode(',', $size).")";
if(isset($price))
$sql.=" WHERE (price IN (".implode(',', $price)."))";
$all_row=$db->query($sql);
它运行良好,但只有一个条件有效——尺寸或价格,我使用的是一个表名——产品。
您可以尝试以下代码片段:
$sql="SELECT * FROM products";
extract($_POST);
if(isset($size) && isset($price))
$sql.=" WHERE size IN (".implode(',', $size).") OR price IN (".implode(',', $price).")";
else if(isset($size))
$sql.=" WHERE size IN (".implode(',', $size).")";
else if(isset($price))
$sql.=" WHERE (price IN (".implode(',', $price)."))";
$all_row=$db->query($sql);
无论是大小还是价格,过滤都会成功。如果要同时匹配它们,请在第一个if
语句中使用AND
而不是OR
注意:在代码中,如果两个变量都设置在一个案例中,则会出现语法错误。这里介绍了IF ELSEIF
链的使用。
假设同时设置了$price
和$size
变量。然后,您的$sql
变量将受到这两个IF
语句的影响。然后,您最终生成的query
将有两个where子句,这将为错误语法生成错误。您生成的查询大致如下所示:
SELECT .... WHERE size IN (....) WHERE price IN (...) ...
(坏语法)
$sql="SELECT * FROM products";
extract($_POST);
if(isset($size) && isset($price))
$sql.=" WHERE size IN (".implode(',', $size).") AND price IN (".implode(',', $price).")";
else if(isset($size))
$sql.=" WHERE size IN (".implode(',', $size).")";
else if(isset($price))
$sql.=" WHERE (price IN (".implode(',', $price)."))";
$all_row=$db->query($sql);
使用这个代码这对我有效。