如何将SELECT(sql)与多个复选框一起使用?

时间:2018-12-12 14:31:52

标签: php html mysql checkbox

我有2个多个复选框,如果勾选了多个复选框,则无法正确显示。在“选择”查询中,仅最后一个复选框用于过滤器。 我在网上搜索了很多东西,但是没有人对此有疑问。

HTML代码:

<aside><h3>Filter:</h3>
    <details open="open">
    <summary><label>Categorie</label></summary>
        <div>
            <label>
            <input  type="checkbox" name="filter_categorie[]" value="dog">
            Dogs
            </label>
        </div>
        <div>
            <label>
            <input  type="checkbox" name="filter_categorie[]" value="fish">
            Fishes
            </label>
        </div>
        <div>
            <label>
            <input  type="checkbox" name="filter_categorie[]" value="other">
            Other
            </label>
        </div>
    </details>
    <details>
    <summary><label>Land</label></summary>
        <div>
            <label>
            <input  type="checkbox" name="filter_country[]" value="germany">
            Germany
            </label>
        </div>
        <div>
            <label>
            <input  type="checkbox" name="filter_country[]" value="austria">
            Austria
            </label>
        </div>
    </details>

    <br><input type='submit' name ='update' value='Update'>

PHP代码:

include("server.inc");
$cxn = mysqli_connect($host,$user,$password,$database) or die ("No connection to Server");
if(isset($_POST['update']) ){
    foreach ($_POST['filter_categorie[]'] as $item){
        $query = "
        SELECT * 
          FROM artikel 
         WHERE Categorie=\"{$_POST['filter_categorie']}\"
";}
$resultat = mysqli_query($cxn,$query) or die ("No results.");

1 个答案:

答案 0 :(得分:0)

尝试类似的方法(未经测试,只是一个主意):

include("server.inc");
$cxn = mysqli_connect($host,$user,$password,$database) or die ("No connection to Server");
if(isset($_POST['update']) ){

  $query = 'SELECT * FROM artikel WHERE Categorie IN ('.implode(',', $_POST['filter_categorie']).')';

  $resultat = mysqli_query($cxn,$query) or die ("No results.");
}

因此,基本上使用$_POST['filter_categorie']而不是$_POST['filter_categorie[]']并使用implode将所有类别作为字符串提供给查询。

无需使用foreach,您不想在前端运行尽可能多的类别选择。

相关问题