PHP - если условие с ** и ** не работает в цикле foreach - PullRequest
0 голосов
/ 29 мая 2018

Я хочу обновить данные массива, которые поступают в цикл foreach.Я пытаюсь с приведенным ниже сценарием, это только обновление самой последней строки данных.

И в этой строке выдается ошибка if ($updateInvoiceAddedItems AND $updateInvoiceSubtractedItems).

PHP script

if (isset($_POST['submit'])) {

foreach($_POST['data'] as $key => $value) {
    $invoiceItemId = intval($value['invoiceItemId']);
    $itemId = intval($value['ItemId']);
    $QTY = intval($value['QTY']);
    $addedQTY = intval($value['addedQTY']);
    $subtractedQty = intval($value['subtractedQty']);
    $Total = is_numeric($value['total']) ? $value['total'] : false;

    try {

        if($addedQTY > 0) {
            $updateInvoiceAddedItems = $db - > prepare("UPDATE `invoiceItems` SET 
            qty = qty + : addedQTY,
            addedQty = addedQty + : addingQTY where id = : Iid ");

            $updateInvoiceAddedItems - > execute(array(':Iid' => $itemId, ':addedQTY' => $addedQTY, ':addingQTY' => $addedQty));

        }
        elseif($subtractedQty > 0) {
            $updateInvoiceSubtractedItems = $db - > prepare("UPDATE `invoiceItems`  SET 
            qty = qty - : subtractedQty,
            subtractedQty = subtractedQty + : subtractingQty where id = : iiId ");

            $updateInvoiceSubtractedItems - > execute(array(':iiId' => $itemId, ':subtractedQty' => $subtractedQty, ':subtractingQty' => $subtractedQty));


        }

        if ($updateInvoiceAddedItems AND $updateInvoiceSubtractedItems) {
            echo ' <script> alert("success") </script>';
            exit;

        } else {
            echo ' <script> alert("Error") </script>';
        }
    } catch (PDOException $e) {
        echo 'Connection failed: '.$e - > getMessage();
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Для первого вопроса следуйте @Darius Answer, а для второго вопроса измените имя ввода с name="data['+i+'][name]" на name="data[<?php echo $i; ?>][name]"

0 голосов
/ 29 мая 2018

Учтите, у вас есть

if($addedQTY > 0) {

}elseif($subtractedQty > 0) {

}

Что произойдет, если вы отправите форму с

$addedQty = 0 и $subtractedQty = 0?

Там нет ничего, чтобы установить $updateInvoiceAddedItems && $updateInvoiceSubtractedItems

Вы получаете ошибку, потому что эти переменные не существуют после оператора if () else ().

Так должно выглядетьнапример:

if($addedQTY > 0) {
        //code
}elseif($subtractedQty > 0) {
        //code
}else{
  // throw error or something because it's not what you expected.
}

// Then do the 
if ($updateInvoiceAddedItems AND $updateInvoiceSubtractedItems) { 
  //code
}

ИЛИ вы могли бы сделать

if (isset($updateInvoiceAddedItems) && isset($updateInvoiceSubtractedItems)) { 
  //code
}

Также .. Я думаю, что ваш && должен быть выражением "ИЛИ", поэтому "||"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...