[英]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.