PHP-如果带**和**的条件在foreach循环中不起作用

PHP-如果带**和**的条件在foreach循环中不起作用,php,arrays,if-statement,pdo,Php,Arrays,If Statement,Pdo,我想更新foreach循环中的数组数据。我正在尝试使用下面给出的脚本,它只更新最后一行数据 如果($updateInvoiceAddedItems和$updateInvoiceSubtractedItems),则在这一行给出错误 PHP脚本 if (isset($_POST['submit'])) { foreach($_POST['data'] as $key => $value) { $invoiceItemId = intval($value['invoiceItemId'

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

如果($updateInvoiceAddedItems和$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();
    }
  }
}
if(isset($\u POST['submit'])){
foreach($_POST['data']作为$key=>$value){
$invoiceItemId=intval($value['invoiceItemId']);
$itemId=intval($value['itemId']);
$QTY=intval($value['QTY']);
$addedQTY=intval($value['addedQTY']);
$subtractedQty=intval($value['subtractedQty']);
$Total=是数值($value['Total'])?$value['Total']:false;
试一试{
如果($addedQTY>0){
$updateInvoiceAddedItems=$db->prepare(“更新`invoiceItems`SET
数量=数量+:添加数量,
addedQty=addedQty+:addingQTY,其中id=:Iid“;
$UPDATEINVOICEADDETEMS->execute(数组(':Iid'=>$itemId',:addedQTY'=>$addedQTY',:addingQTY'=>$addedQTY));
}
elseif($subjectedQTY>0){
$updateInvoiceSubtractedItems=$db->prepare(“更新`invoiceItems`SET
数量=数量-:减去数量,
减法数量=减法数量+:减法数量,其中id=:iiId“;
$UPDATEINVOICESUBTRACTEDMS->execute(数组(':iiId'=>$itemId',:subtractedQty'=>$subtractedQty',:subtractingQty'=>$subtractedQty));
}
if($UpdateInvoiceAddItems和$updateInvoiceSubtractedItems){
回声“警报(“成功”);
出口
}否则{
回显“警报(“错误”);
}
}捕获(PDO$e){
回显“连接失败:”。$e->getMessage();
}
}
}

考虑到这一点,您必须

if($addedQTY > 0) {

}elseif($subtractedQty > 0) {

}
如果您提交带有

$addedQty=0
$subtractedQty=0

没有要设置的内容(
$updateInvoiceAddItems&&$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
}

还有。。我认为你的&&应该是一个“或”语句,所以“| |”?

考虑一下,你有

if($addedQTY > 0) {

}elseif($subtractedQty > 0) {

}
如果您提交带有

$addedQty=0
$subtractedQty=0

没有要设置的内容(
$updateInvoiceAddItems&&$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
}

还有。。我认为你的&&应该是一个“或”语句,所以“| |”?

对于第一个问题,遵循@Darius答案,对于第二个问题,将输入名称从
name=“data['+I+'][name]”更改为
name=“data[][name]”
,对于第一个问题,遵循@Darius答案,对于第二个问题,将输入名称从
name=“data['+I+][name]“
name=“数据[][name]”

在您的条件下使用
&
而不是
&
在这里应该没有区别。但是,如果不满足条件,您正在比较的变量是未定义的。为什么要精确检查这些PDO对象?以及
$sub\u invoiceItems
是什么?您可能需要t
$updateInvoiceSubtractedItems
@SamSwift웃 我已经改了,改为&&但这一行仍然有错误。使用@jeroen的建议-我的答案仅仅是我在过去和经验中所做的,他的评论似乎更多的是关于钱。你怎么知道它只更新最后一行。我的意思是,如果生成错误,它将在第一个循环中停止脚本。使用
&&&
中的de>而不是
在这里不应该有区别。但是,如果不满足条件,您正在比较的变量是未定义的。为什么要精确检查这些PDO对象?什么是
$sub\u invoiceItems
?您可能需要
$updateInvoiceSubtractedItems
@SamSwift웃 我已经改了,改为&&但这一行仍然有错误。使用@jeroen的建议-我的答案仅仅是我在过去和经验中所做的,他的评论似乎更多的是关于钱。你怎么知道它只更新最后一行。我的意思是,如果生成错误,它将在第一个循环中停止你的脚本。谢谢@Darius-现在它没有在if语句中给出错误,但第一个问题仍然存在。它只是更新了最后一行数据。唯一可能的原因是$\u POST发送了错误的ID。上传什么变量转储($\u POST)看起来像。谢谢@Darius-现在它在if语句中没有给出错误,但第一个问题仍然存在。它只是更新了最后一行数据。唯一可能的原因是$\u POST发送了错误的ID。上传变量转储($\u POST)的样子。