Php过滤系统

时间:2015-06-13 20:54:25

标签: php mysql filter

我想用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;有标准值吗?

1 个答案:

答案 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设置默认值只是在你不想要时过滤记录。你可能想要的是第一个例子。