我试图在PHP中使用多个选中的复选框值执行多个查询。我面临的问题是,我的代码只执行一个复选框值的查询,而其余的被拒绝。
关于这个问题,我查看了StackOverflow,我得到了很多关于foreach循环的线程,但在我的例子中,当我应用它时,它不起作用。
请帮助我,我是第一次尝试前程循环,所以我有一点困惑,关于同样的。我还有一个问题,就是我无法不通过数组验证无效数据。我怎么解决这个问题的?它只适用于第一个复选值,但我想要所有的复选框。我试图从我在复选框中选择的那些特定ids的数据库中获取数据。并在数组中对所有查询进行回显,如我下面所述-
发送表单数据格式,如dev工具所示
referenceID[]: PO0203211
referenceID[]: PO203213$checkbox = $_POST['referenceID'];
foreach ($checkbox as $chk) {
$stmt = $con->prepare(
"SELECT * FROM `table` WHERE `ref` = :referenceid"
);
$stmt->execute([':referenceid' => $chk]);
$stmt = $stmt->fetchAll();
$response = [];
$i = 1;
foreach ($stmt as $data) {
$response[] = [
"slno" => $i,
"name" => $data['name'],
"orderid" => $data['address'],
];
$i++;
}
echo json_encode($response);
exit();
}发布于 2021-03-03 15:28:24
尝试这样做,当在foreach中使用exit()时,代码不会继续,只执行第一个元素。
编辑1:
好的,我将更深入地解释如何优化这段代码。
您可以从复选框中获得"id“标识符。
您可以使用SQL ()对此进行优化。
看看这个
$checkboxDivide = implode("','", $_POST['referenceID']);
$response = []; //Final Result
$stmt = [];
$query = mysqli_query($con,
"SELECT * FROM `table` WHERE `ref` IN('{$checkboxDivide}')"
);
while($stmt[] = mysqli_fetch_assoc($query));
//Delete empty last array
array_pop($stmt);
$i = 1;
foreach ($stmt as $data) {
$response[] = [
"slno" => $i,
"name" => $data['name'],
"orderid" => $data['address'],
];
$i++;
}
echo json_encode($response);发布于 2021-03-03 15:23:25
您使用的是exit()函数,它将终止当前脚本。见php出口手册。
我指的是
foreach ($checkbox as $chk) {}而不是去
foreach ($stmt as $data) {}脚本将在第一个foreach的第一个循环之后终止。
试着把它从前排移开。
**由于@El_vanja的评论而更新的答复
将您的$response = [];数组移动到foreach循环的上方和外部。这将保持数组中的数据,而不会在foreach循环的每一次迭代中重置数组。
https://stackoverflow.com/questions/66459934
复制相似问题