【问题标题】:PHP - If condition with **AND** is not working within foreach loopPHP - 如果带有 **AND** 的条件在 foreach 循环中不起作用
【发布时间】:2018-05-29 09:43:36
【问题描述】:

我想更新 foreach 循环中的数组数据。我正在尝试使用下面给出的脚本,它只更新最后一行数据。

它在这一行给出错误if ($updateInvoiceAddedItems AND $updateInvoiceSubtractedItems)。

PHP 脚本

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

【问题讨论】:

  • 在你的情况下使用&amp;&amp;而不是AND
  • &amp;&amp; 或 AND 在这里不应该有所作为。但是,如果不满足条件,您正在比较的变量是未定义的。为什么要准确检查这些 PDO 对象? $sub_invoiceItems 是什么?你可能想要$updateInvoiceSubtractedItems。
  • @SamSwift웃 我已将 AND 更改为 && 但它仍然在这一行给出错误。
  • 使用@jeroen 的建议 - 我的回答只是我过去所做的和经验,他的评论似乎更多的是钱
  • 你怎么知道它只更新最后一行。我的意思是如果产生错误,它会在第一个循环中停止你的脚本。

标签: php arrays if-statement pdo


【解决方案1】:

对于第一个问题,请关注@Darius Answer 对于第二个问题,将输入名称从name="data['+i+'][name]" 更改为name="data[&lt;?php echo $i; ?&gt;][name]"

【讨论】:

    【解决方案2】:

    考虑到这一点,你有

    if($addedQTY > 0) {
    
    }elseif($subtractedQty > 0) {
    
    }
    

    如果您使用

    提交表单会发生什么

    $addedQty = 0 和 $subtractedQty = 0 ?

    没有什么可以设置$updateInvoiceAddedItems &amp;&amp; $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
    }
    

    另外.. 我认为你的 && 应该是一个“OR”语句,所以“||” ?

    【讨论】:

    • 感谢@Darius - 现在它在 if 语句中没有给出错误,但第一个问题仍然存在。 它只更新最后一行数据。
    • 唯一可能的原因是 $_POST 发送了错误的 ID。上传 var_dump($_POST) 的样子。
    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多