PHP-使用多个复选框选项构建SQL查询
我使用表单和PHP-使用多个复选框选项构建SQL查询,php,sql,Php,Sql,我使用表单和POST方法构建了一个SQL查询。我使用复选框,可以有多个值,所以当我有多个选择时,我想插入一个或 # Form <form action="" method="post"> <input id="01" name="choice[]" type="checkbox" value="01"> <input id="02" name="choice[]" type="checkbox" value="02"> <inpu
POST
方法构建了一个SQL
查询。我使用复选框,可以有多个值,所以当我有多个选择时,我想插入一个或
# 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");
}
如何解决此问题?请按以下方式更改您的
foreach
:
foreach($_POST["choice"] as $value_choice) {
if ($value_choice === end($_POST["choice"]))
{
echo "type = '$value_choice'";
}
else
{
echo "type = '$value_choice' OR ";
}
}
您可以在 比如:
SELECT name, type FROM data.myData
WHERE type IN ('01','02','03')
GROUP BY name, type
希望这将帮助您:
$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");
使用所有复选框值创建一个逗号分隔的字符串,如下所示:
$all_ck_box = implode(',', $_POST['choice']);
$sql = $db->query("SELECT name, type
FROM data.myData
WHERE type IN (".
implode(',', $_POST["choice"])
.") GROUP BY name, type
ORDER BY name, type");
}
然后将其与mysql查询的where in
子句一起使用
SELECT name, type FROM data.myData
WHERE type IN ($all_ck_box)
GROUP BY name, type
因此,您的更新代码将是:
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");
}
正如@Rahul Mukherjee所建议的,您可以做如下事情:
$all_ck_box = implode(',', $_POST['choice']);
$sql = $db->query("SELECT name, type
FROM data.myData
WHERE type IN (".
implode(',', $_POST["choice"])
.") GROUP BY name, type
ORDER BY name, type");
}
如果未选择任何选项且未在条件中处理,则会引发错误。您只能为此编写检查条件!希望这会有所帮助我还想指出,我认为(到目前为止)大多数答案对SQL注入问题是开放的。虽然假设只能传递有效值,但为了恶意目的而发明自己的值并不太困难。@GeoGyro嗨,我刚刚注意到-Himanshu Upadhyay-在我做一分钟左右的事情之前回答了你的问题,所以请随意接受他的答案,而不是我的。@AmrAly,非常感谢您推荐我的答案。@himanshhuupadhyay不客气;)@奈杰伦:你如何防止这种情况发生?这是一个很好的方法,但有些引语不见了
$all-ck\u-box
类似于01,02,03
,对于SQL
而言,它必须是'01'、'02'、'03'
才能尊重SQL
引用$all-ck\u-box=“””。内爆(“,”,$\u POST['choice'])。"'";代码>一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。