Reputation: 5
I am trying to execute multiple queries with the multiple selected checkbox value-wise in PHP. I am facing trouble that my code is executing only one checkbox value-wise query and the rest is denied.
I checked on StackOverflow about this issue and I got lots of threads about foreach loop but in my case, it is not working when I am applying that.
Please help me, I am first time trying the foreach loop and so that I have a bit confusing about the same. I have also the problem that I am not able not to validate invalid data through an array. How I fix this? it only works for the first check value but I want all checked checkboxes. I am trying to fetch data from the database of those particular ids which value I selected in the checkbox. and echo it in the array for that all query as I mention below-
Sending Form Data format as seen in dev tool
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();
}
Upvotes: 0
Views: 102
Reputation: 99
Try this, when using exit()
inside the foreach the code does not continue and only performs the first element.
EDIT 1:
Ok, I'm going to explain a little more in depth how to optimize this code.
You get "id" identifiers from checked checkboxes.
You can use SQL IN () to optimize this.
Look at this
$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);
Upvotes: 1
Reputation: 330
You're using the exit()
function withing your foreach, which will terminate the current script. See php manual on exit.
I am referencing to the
foreach ($checkbox as $chk) {}
not to the
foreach ($stmt as $data) {}
The script will terminate after the first loop of the first foreach.
Try moving it out of the foreach.
**Updated answer because of the comment from @El_vanja
Move your $response = [];
array above and out of the foreach loop. This will keep the data in the array and not reset the array every iteration of the foreach loop.
Upvotes: 0