foreach array wise multi SQL query not working in PHP
foreach array wise multi SQL query not working in PHP
我正在尝试使用 PHP 中的多个选中的复选框按值执行多个查询。
我遇到了麻烦,因为我的代码只执行一个复选框值查询,其余的都被拒绝了。
我在 Whosebug 上检查了这个问题,我得到了很多关于 foreach 循环的线索,但在我的例子中,当我应用它时它不起作用。
请帮助我,我是第一次尝试 foreach 循环,所以我对它有点困惑。
我还有一个问题,就是无法通过数组验证无效数据。
我该如何解决这个问题?它只适用于第一个检查值,但我想要所有选中的复选框。
我正在尝试从我在复选框中选择的那些特定 ID 的数据库中获取数据。并在我下面提到的所有查询的数组中回显它-
发送在开发工具中看到的表单数据格式
referenceID[]: PO0203211
referenceID[]: PO203213
PHP
$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();
}
您正在将 exit()
函数与您的 foreach 一起使用,这将终止当前脚本。参见 php manual on exit。
我指的是
foreach ($checkbox as $chk) {}
没到
foreach ($stmt as $data) {}
脚本将在第一个 foreach 的第一个循环后终止。
尝试将其移出 foreach。
**由于@El_vanja
的评论更新了答案
将您的 $response = [];
数组移到 foreach 循环之外。这会将数据保留在数组中,并且不会在 foreach 循环的每次迭代中重置数组。
试试这个,当在 foreach 中使用 exit()
时,代码不会继续,只执行第一个元素。
编辑 1:
好的,我将更深入地解释如何优化这段代码。
您从选中的复选框中获取“id”标识符。
可以用SQLIN()来优化这个
看看这个
$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);
我正在尝试使用 PHP 中的多个选中的复选框按值执行多个查询。 我遇到了麻烦,因为我的代码只执行一个复选框值查询,其余的都被拒绝了。
我在 Whosebug 上检查了这个问题,我得到了很多关于 foreach 循环的线索,但在我的例子中,当我应用它时它不起作用。
请帮助我,我是第一次尝试 foreach 循环,所以我对它有点困惑。 我还有一个问题,就是无法通过数组验证无效数据。 我该如何解决这个问题?它只适用于第一个检查值,但我想要所有选中的复选框。 我正在尝试从我在复选框中选择的那些特定 ID 的数据库中获取数据。并在我下面提到的所有查询的数组中回显它-
发送在开发工具中看到的表单数据格式
referenceID[]: PO0203211
referenceID[]: PO203213
PHP
$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();
}
您正在将 exit()
函数与您的 foreach 一起使用,这将终止当前脚本。参见 php manual on exit。
我指的是
foreach ($checkbox as $chk) {}
没到
foreach ($stmt as $data) {}
脚本将在第一个 foreach 的第一个循环后终止。
尝试将其移出 foreach。
**由于@El_vanja
的评论更新了答案将您的 $response = [];
数组移到 foreach 循环之外。这会将数据保留在数组中,并且不会在 foreach 循环的每次迭代中重置数组。
试试这个,当在 foreach 中使用 exit()
时,代码不会继续,只执行第一个元素。
编辑 1:
好的,我将更深入地解释如何优化这段代码。
您从选中的复选框中获取“id”标识符。
可以用SQLIN()来优化这个
看看这个
$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);