我想用4个变量制作这样的php过滤系统:
echo"<form action='' method='GET' class='form-inline' role='form'>";
$query = "SELECT Naam FROM Soortmaaltijd"; //Alle soortmaaltijden ophalen
$result= mysql_query($query) or die(mysql_error());
echo"<div class='row'>";
echo"<div class='form-group' >";
echo"<label for='soortmaaltijd'>Soort maaltijd</label></br>";
echo"<select name='Soortmaaltijd' class='form-control' id='soortmaaltijd'>";
echo"<option value=''>Alle</option>";
while($row=mysql_fetch_array($result)) {
echo"<option value='$row[SoortmaaltijdID]'>$row[Naam]</option>";
}
echo"</select>";
echo"</div>";
$query = "SELECT * FROM Soortgerecht"; //Alle soortgerechten ophalen
$result= mysql_query($query) or die(mysql_error());
echo"<div class='form-group' >";
echo"<label for='soortgerecht'>Soort gerecht</label></br>";
echo"<select name='soortgerecht' class='form-control' id='soortgerecht'>";
echo"<option value=''>Alle</option>";
while($row=mysql_fetch_array($result)) {
echo"<option value='$row[SoortgerechtID]'>$row[Naam]</option>";
}
echo"</select>";
echo"</div>";
echo"<div class='form-group' >";
echo"<label for='moeilijkheid'>Moeilijkheid</label></br>";//Moeilijkheid
echo"<select name='moeilijkheid' class='form-control' id='moeilijkheid'>";
echo"<option value=''>Alle</option>";
echo"<option value='1'>1</option>";
echo"<option value='2'>2</option>";
echo"<option value='3'>3</option>";
echo"</select>";
echo"</div>";
echo"<div class='form-group' >";
echo"<label for='tijd'>Max bereidingstijd</label></br>";//Max bereidingstijd
echo"<select name='tijd' class='form-control' id='tijd'>";
echo"<option value=''>Alle</option>";
echo"<option value='5'><5</option>";
echo"<option value='10'><10</option>";
echo"<option value='15'><15</option>";
echo"<option value='20'><20</option>";
echo"<option value='25'><25</option>";
echo"<option value='30'><30</option>";
echo"</select>";
echo" <button type='submit' name='filter' class='btn btn-primary btn-lg-2'>Filter</button>";
echo"</div>";
echo"</div>";
echo"</form>"; ?>
但是,即使某些过滤器设置没有更改,我怎样才能构建一个使用所有变量的查询。可以创建20个查询,但这需要花费太多时间。是否有可能创建这样的东西:
WHERE Tijd = $tijd AND Soortmaaltijd = $soortmaaltijd AND Soortgerecht = $soortmaaltijd AND Moeilijkheid = $moeilijkheid
但如果过滤器中未设置某些值,例如Tijd&#39; Tijd&#39;有标准值吗?
答案 0 :(得分:0)
您可能只需要提前构建完整的WHERE
,这样就不会向查询发送4个变量,而是发送一个WHERE
语句。
示例1(构建$ where var以连接您的条件):
$where = "WHERE ";
$count = 0;
if ( !empty($tijd) ) {
$where .= "`Tijd` = " . $tijd . " ";
++$count;
} elseif( !empty($soortmaaltijd) ) {
if ($count == 0)
$where .= "`Soortmaaltijd` = " . $soortmaaltijd . " ";
else
$where .= "AND `Soortmaaltijd` = " . $soortmaaltijd . " ";
++$count;
} elseif( !empty($soortgerecht) ) {
if ($count == 0)
$where .= "`Soortgerecht` = " . $soortgerecht . " ";
else
$where .= "AND `Soortgerecht` = " . $soortgerecht . " ";
++$count;
} elseif( !empty($moeilijkheid) ) {
if ($count == 0)
$where .= "`Moeilijkheid` = " . $moeilijkheid . " ";
else
$where .= "AND `Moeilijkheid` = " . $moeilijkheid . " ";
++$count;
} else {
$where = null; // if none of the conditions are met we null
// the entire `WHERE` statement so we can safely
// send to our SQL query regardless of no conditions
// being met
}
// then your sql statement could be something like:
$sql = "SELECT *
FROM tablename
$where"; // remember: if ($where == null)
// that means no filters are set and
// all records from table are returned
此示例假定您要将空变量作为null
查询处理。在您的问题中,您是否想要跳过查询空值或者是否要将空值变为默认值时,有点不清楚。正如评论中所提到的,使用三元运算符设置变量以切换默认值非常容易。
示例2(在空变量上设置默认值):
$default_tijd = "whatever you want";
$tijd = ($tijd) ? $tijd : $default_tijd; // if $tijd is already set take
// that value, else use $default_tijd
但是,我几乎肯定你不想返回未设置为任何内容的过滤器的记录,因此为你的vars设置默认值只是在你不想要时过滤记录。你可能想要的是第一个例子。