PHP-如果带**和**的条件在foreach循环中不起作用
我想更新foreach循环中的数组数据。我正在尝试使用下面给出的脚本,它只更新最后一行数据 如果($updateInvoiceAddedItems和$updateInvoiceSubtractedItems),则在这一行给出错误 PHP脚本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'
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)的样子。