【发布时间】:2018-07-22 18:12:45
【问题描述】:
我在更新从 invoiceitem 表获取的数据以更新产品表 quantity 时遇到问题。
这个问题只是我循环中正在更新的第一条记录。
请帮助我将多个项目值更新到数据库。
这是我的代码:
<?php
$stuid = $_GET['id'];
global $con;
$stu_query = "SELECT * FROM invoiceorder INNER JOIN invoiceorderitem ON invoiceorder.InvoId = invoiceorderitem.InvoId WHERE invoiceorder.InvoId ='$stuid'";
$stu_run = mysqli_query($con,$stu_query);
while($sorows = mysqli_fetch_array($stu_run)){
$Date = $sorows['Date'];
$SalesPerson = $sorows['SalesPerson'];
$Telephone = $sorows['Telephone'];
$Customer = $sorows['Customer'];
$CurrentPayment = $sorows['CurrentPayment'];
$Balance = $sorows['Balance'];
$Item_Id = $sorows['Item_Id'];
$ItemDescription = $sorows['ItemDescription'];
$UnitPrice = $sorows['UnitPrice'];
$Quantity = $sorows['Quantity'];
$SubTotal = $sorows['SubTotal'];
$Total = $sorows['Total'];
$sea_res = mysqli_query($con, "SELECT * FROM bincard WHERE BinId = $Item_Id");
while ($resresults = $sea_res->fetch_assoc()){
$BinId = $resresults['BinId'];
$ItemName = $resresults['ItemName'];
$QtyBalance = $resresults['QtyBalance'];
$QtyIssued = $resresults['QtyIssued'];
//chech this
$newqty=0;
$isuqty=0;
$newqty =$QtyBalance - $Quantity;
$isuqty = $QtyIssued + $Quantity;
$insert_query = "UPDATE bincard SET QtyBalance='$newqty',QtyIssued='$isuqty' WHERE BinId = $Item_Id";
}
if ($con->query($insert_query) === TRUE)
{
echo"<script>alert(' Updated Successfully')</script>";
echo"<script>window.open('invoiceprint.php','_self')</script>";
} else
{
echo "Error: " . $insert_query . "<br>" . $con->error;
}
$con->close();
}
?>
【问题讨论】:
-
嗨,欢迎来到堆栈溢出。这只是一个友好的提醒,您的代码容易受到 MySQL 注入的影响。您应该考虑使用prepared statments,因为此代码不适合生产
-
您的代码失败了,因为您的
if ($con->query($insert_query) === TRUE)位于 while 循环之外。在 while 循环中移动 if 语句块,它将插入整个数组。 -
This issue is only the first record is updating实际上是不正确的;它实际上只是更新最后一条记录。只是挑剔=) -
@IsThisJavascript 不...!只有第一条记录在更新其他数据跳过..谢谢
-
嗯,您可以通过运行
print_r($sea_res)来仔细检查。$insert_query在每个循环期间都被设置,并且只有在循环完成后您才运行 SQL 查询命令。因此最后一条数据不是第一个更新。因为第一个很久以前就被覆盖了……但这不是问题的重点。希望您设法解决了您的问题。