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(); }
Advertisement
Answer
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);