【问题标题】:PHP: updating product table quantity while fetching data from another tablePHP:从另一个表中获取数据时更新产品表数量
【发布时间】: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-&gt;query($insert_query) === TRUE) 位于 while 循环之外。在 while 循环中移动 if 语句块,它将插入整个数组。
  • This issue is only the first record is updating 实际上是不正确的;它实际上只是更新最后一条记录。只是挑剔=)
  • @IsThisJavascript 不...!只有第一条记录在更新其他数据跳过..谢谢
  • 嗯,您可以通过运行 print_r($sea_res) 来仔细检查。 $insert_query 在每个循环期间都被设置,并且只有在循环完成后您才运行 SQL 查询命令。因此最后一条数据不是第一个更新。因为第一个很久以前就被覆盖了……但这不是问题的重点。希望您设法解决了您的问题。

标签: php mysql


【解决方案1】:

if ($con-&gt;query($insert_query) === TRUE) 放在while 循环中。如果它只更新一条记录,那么$sea_res-&gt;fetch_assoc() 中只有一条记录。

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

【讨论】:

  • 如果你说它只更新最后保存的一条记录 $item_id 变量只获取 1 个值....那么问题应该出在我的第一个 while 循环和变量中t 保留多个数据..请您检查我的第一个 while 循环。谢谢你和我在一起
猜你喜欢
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2018-06-30
  • 2021-07-23
  • 1970-01-01
  • 2018-03-03
相关资源
最近更新 更多