简体   繁体   English

PHP-建立具有多个复选框选择的SQL查询

[英]PHP - Build a SQL query with multiple checkbox choices

I build a SQL query using a form and POST method. 我使用表单和POST方法构建一个SQL查询。 I'm using checkboxes and I can have several values, so I want to insert a OR when I have mutiple choices. 我正在使用复选框,并且可以有多个值,所以我想在有多个选择时插入一个OR

# Form
<form action="" method="post">
    <input id="01" name="choice[]" type="checkbox" value="01">
    <input id="02" name="choice[]" type="checkbox" value="02">
    <input id="03" name="choice[]" type="checkbox" value="03">
    <input type="submit"  name="btSubmit"/>
</form>

# Query
if(isset($_POST["btSubmit"]) and !empty($_POST['choice'])) {

    foreach($_POST["choice"] as $value_choice) echo  "type = '$value_choice' OR ";

    $sql = $db->query("SELECT name, type
                   FROM data.myData 
                   WHERE '$value_choice'
                   GROUP BY name, type
                   ORDER BY name, type");

}

When I have several choices this syntax is wrong because because of the last OR my query looks like this : 当我有几种选择时,此语法是错误的,因为由于最后一个OR我的查询如下所示:

SELECT name, type FROM data.myData
WHERE type='01' OR type='02' OR type='03' OR
GROUP BY name, type
ORDER BY name, type

How can I fix this ? 我怎样才能解决这个问题 ?

Instead of OR operator you can use IN 可以使用IN代替OR运算符

like: 喜欢:

 SELECT name, type FROM data.myData
 WHERE type IN ('01','02','03')
 GROUP BY name, type

Change your foreach as follow : 更改您的foreach ,如下所示:

foreach($_POST["choice"] as $value_choice) {
    if ($value_choice === end($_POST["choice"]))
    {
        echo  "type = '$value_choice'";
    }
    else
    {
        echo  "type = '$value_choice' OR ";
    }
}
if(isset($_POST["btSubmit"]) and !empty($_POST["choice"])) {

    foreach($_POST["choice"] as $value_choice){
        $wherQuery[] =  " type = '$value_choice' ";
    }
    $whr = JOIN(" OR ", $wherQuery);

    $sql = $db->query("SELECT name, type
                   FROM data.myData 
                   WHERE 1 AND $whr 
                   GROUP BY name, type
                   ORDER BY name, type");

}

Make a comma separated string with all checkbox values like this: 使用所有复选框值创建一个用逗号分隔的字符串,如下所示:

$all_ck_box = implode(',', $_POST['choice']);

And then use it with where in clause of mysql query. 然后将其与mysql查询的where in子句一起使用。

SELECT name, type FROM data.myData
 WHERE type IN ($all_ck_box)
 GROUP BY name, type

So your updated code would be : 因此,您更新的代码将是:

if(isset($_POST["btSubmit"]) and !empty($_POST['choice'])) {

    $all_ck_box = implode(',', $_POST['choice']);
    $sql = $db->query("SELECT name, type
               FROM data.myData 
               WHERE type IN (".$all_ck_box.")
               GROUP BY name, type
               ORDER BY name, type");
}

As @Rahul Mukherjee suggested you can do something like this: 正如@Rahul Mukherjee所建议的,您可以执行以下操作:

$sql = $db->query("SELECT name, type
               FROM data.myData 
               WHERE type IN (".
               implode(',', $_POST["choice"])
               .") GROUP BY name, type
               ORDER BY name, type");
}

Hope this will help you: 希望这个能对您有所帮助:

$orClause = "";
$or = "";
foreach($_POST["choice"] as $value_choice) {
    $orClause .= $or . " type = '$value_choice' ";
    $or = " OR ";
}

$sql = $db->query("SELECT name, type
                   FROM data.myData 
                   WHERE $orClause
                   GROUP BY name, type
                   ORDER BY name, type");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM