Satyam
Satyam

Reputation: 5

foreach array wise multi SQL query not working in PHP

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

Answers (2)

Daniel Riera
Daniel Riera

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

Tim
Tim

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

Related Questions