PHP - цикл Foreach While Loop - Клиент электронной почты и база данных обновления для каждого запаса (количества), который они вводят - PullRequest
0 голосов
/ 09 ноября 2019

Я застрял на этом некоторое время и не могу понять это.

Я запускаю количество в целых числах, например, 5.

Я хочуциклически проходить каждое количество, пока не будет достигнуто максимальное количество, max - это количество, которое они вводят, начиная с 0.

Это мой запрос, чтобы получить элементы запасов:

$product_id = '1';
$quantity = '2';

$smtp_main = $pdo->prepare('SELECT * FROM `productitems` WHERE `avaliable` = :avaliable AND `assignedProduct` = :assignedProduct LIMIT :limit');
$smtp_main->execute(array(':avaliable' => '0', ':assignedProduct' => $product_id, ':limit' => $quantity));

$query = $smtp_main->fetchAll();

Тогда этомой текущий цикл while / foreach:

        // Foreach loop here
        $i = 0;
        $maxiterations = $quantity;

        while($i <= $maxiterations) {
            foreach($query as $row_product) {
                $product_link_stock = $row_product['code'];
                $stock_id_stock = $row_product['id'];
            }

            $message .= "<tr style='background: #eee;'><td><strong>Email/Username:Pass(".$i."):</strong> </td><td>".$product_link_stock."</td></tr>";
            $i++;

            // Update stock foreach stock product they require (quantity depends on this)
            $updateStock = $pdo->prepare('UPDATE `productitems` SET `avaliable` = :avaliable WHERE `id` = :id');
            $updateStock->execute(array(':avaliable' => '1', ':id' => $stock_id_stock));
        }

Тогда моя почтовая функция находится вне обоих циклов и отправляет почту без проблем.

Я получаю сообщение об ошибке:только понижается на 1, и в сообщении, которое я получаю, не отображается 2 акции - Results

1 Ответ

0 голосов
/ 09 ноября 2019

Если я правильно понял, тогда $ row_product содержит несколько продуктов, а вы обновляете только последний, потому что $ message, $ i и $ updateStock находятся вне цикла foreach. Попробуйте поместить этот код в цикл foreach.

Однако я бы посоветовал избегать вложенных циклов и использовать только один foreach. Потому что вы обновляете акции, доступные до 1, несколько раз, что не имеет смысла.

Для генерации сообщения $ вы можете использовать функцию str_repeat ()

Обновление

foreach($query as $i => $row_product) {
   $product_link_stock = $row_product['code'];
   $stock_id_stock = $row_product['id'];
   $message .= "<tr style='background: #eee;'><td><strong>Email/Username:Pass(".$i."):</strong> </td><td>".$product_link_stock."</td></tr>";

   $updateStock = $pdo->prepare('UPDATE `productitems` SET `avaliable` = :avaliable WHERE `id` = :id');
   $updateStock->execute(array(':avaliable' => '1', ':id' => $stock_id_stock));        

}
...