Php订单成功后的库存管理

问题描述

我正在研究库存商店项目。一切顺利,但在订单成功后我遇到了一个问题。 当用户下订单并重定向到结帐页面时。当用户填写帐单并单击按钮时。我运行了一个将订单及其详细信息存储在数据库中的流程,以及一个管理数据库中产品库存的流程。

来自隐藏字段的值:

         <?php
          foreach ($_SESSION['shopping_cart'] as $key => $value) {
         ?>
    <input type="hidden" name="product_id[]" value="<?php echo $value['product_id'] ?>">
    <input type="hidden" name="product_name[]" value="<?php echo $value['product_name'] ?>">
    <input type="hidden" name="product_color[]" value="<?php echo $value['product_color'] ?>">
    <input type="hidden" name="product_size[]" value="<?php echo $value['product_size'] ?>">
    <input type="hidden" name="product_quantity[]" value="<?php echo $value['product_quantity'] ?>"> 
   
         <?php } ?>

在数组中存储值:

           // ==========================================

            $pcolor = array();
            foreach ($_POST['product_color'] as $pc => $pcvalue) {
                $pcolor[] .=  $pcvalue;
            }
            $product_color = implode(',',$pcolor);
            // ==========================================


            $psize = array();
            foreach ($_POST['product_size'] as $ps => $psvalue) {
                $psize[] .=  $psvalue;
            }
            $product_size = implode(',$psize);
            // ==========================================


            $pid = array();
            foreach ($_POST['product_id'] as $proid => $pidvalue) {
                $pid[] .=  $pidvalue;
            }
            $product_id = implode(',$pid);
            // ==========================================


            $pquantity = array();
            foreach ($_POST['product_quantity'] as $pq => $pqvalue) {
                $pquantity[] .=  $pqvalue;
            }
            $product_quantity = implode(',$pquantity);
            // ==========================================



            $pname = array();
            foreach ($_POST['product_name'] as $pn => $pnvalue) {
                $pname[] .=  $pnvalue;
            }
            $product_name = implode(',$pname);
            // ==========================================

我的代码:

            // Update Query 
            $update_quantity = "";
            for ($i = 0; $i < (count($_SESSION['shopping_cart'])); $i++) {

                $select_quan = "SELECT * FROM product WHERE pid = {$pid[$i]}";
                $result_quan = mysqli_query($con,$select_quan);                    

                while ($row_quan = mysqli_fetch_assoc($result_quan)) {

                    $quantity_after_order[$i] =   $row_quan['pquantity'] - ($pquantity[$i]);

                    $update_quantity .= "UPDATE product SET pquantity = '$quantity_after_order[$i]' WHERE pid=$pid[$i]; ";

                }
                $res = mysqli_query($con,$update_quantity);
                print_r($res);
            }
            print_r($update_quantity);

$update_quantity 查询运行完美,但 mysqli_query 仅更新数据库中的第一个值和第二个产品值保持不变。

$res = mysqli_query($con,$update_quantity) 的输出

         1

update_quantity 的输出

         UPDATE product SET pquantity = '211' WHERE pid=7; UPDATE product SET pquantity = '9' WHERE pid=31;
       

请帮助我如何更新数据库中的所有产品数量(用户订购的)。

解决方法

我找到了解决方案:

我正在使用

mysqli_query

我将 mysqli_query 更新为

mysqli_multi_query

我的代码运行是正确的。

我的代码:

我从 while 循环中删除了 mysqli_query:

            $res = "";
            $update_quantity = "";
            for ($i = 0; $i < (count($_SESSION['shopping_cart'])); $i++) {

                $select_quan = "SELECT * FROM product WHERE pid = {$pid[$i]}";
                $result_quan = mysqli_query($con,$select_quan);

                while ($row_quan = mysqli_fetch_assoc($result_quan)) {

                    $quantity_after_order[$i] =   $row_quan['pquantity'] - ($pquantity[$i]);

                    $update_quantity .= "UPDATE product SET pquantity = '$quantity_after_order[$i]' WHERE pid=$pid[$i]; ";
                }
            }

并在我的项目中添加这部分代码:

            // Execute multi query
            if (mysqli_multi_query($con,$update_quantity)) {
                do {
                    // Store first result set
                    if ($result = mysqli_store_result($con)) {
                        while ($row = mysqli_fetch_row($result)) {
                            printf("%s\n",$row[0]);
                        }
                        mysqli_free_result($result);
                    }
                    // if there are more result-sets,the print a divider
                    if (mysqli_more_results($con)) {
                    }
                    //Prepare next result set
                } while (mysqli_next_result($con));
            }

在这些更新之后:

每个订单产品更新的产品数量。

谢谢

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...