繁体   English   中英

如何从产品表和订单表中减去值?

[英]How do I substract values from product table and order table?

订单表

在此处输入图像描述

产品表

在此处输入图像描述

图片是订单和产品表。 我正在尝试更改管理员确认客户订单的产品库存数量,并且产品数量将根据订单表中添加的数量而变化。

我试过的:

我尝试了如下代码,但没有任何变化。 没有任何效果。

function upOrder(){
global $db;
    $uid = $_SESSION['user_id'];
    $oid = intval($_GET['oid']);
    $pid = intval($_GET['pid']);
    $status = $_POST['status'];

            $sql=mysqli_query($db,"update orders set payment_status='$status', confirmDate = CURRENT_TIMESTAMP where id='$oid'");

            if($status == 'Completed'){

            $result =mysqli_query($db,"SELECT productQty FROM products WHERE id = '$pid'");
            $query =mysqli_query($db,"SELECT * FROM orders WHERE id = '$oid' AND user_id = '$uid' AND product_id = '$pid'");

            $productRow = $result->fetch_assoc();
            $orderRow = $query->fetch_assoc();

            $newqty = $productRow['productQty'] - $orderRow['quantity'];
            $wow =mysqli_query($db,"UPDATE products SET productQty = '$newqty' WHERE id = '$pid'");

            if($wow){

                echo "alert('Order updated sucessfully...');";

            }else{

                echo "alert('Failed!');";

            }
            }

}

我已经在本地服务器中尝试了您的代码来创建数据库,但是设置了一些变量

$uid = 41;
$oid = 165;
$pid = 38;
$status = 'Completed';

并且代码运行良好,所以我尝试了一些其他值来重现您的错误,因此更改了 uid:

$uid = 411;
$oid = 165;
$pid = 38;
$status = 'Completed';

订单已更新,但产品未更新。

这是因为在行

$query =mysqli_query($db,"SELECT * FROM orders WHERE id = '$oid' AND user_id = '$uid' AND product_id = '$pid'");

您正在按 user_id 过滤订单,但该订单可能不是从注册用户创建的。

您可以在 function 中添加以下转储来验证这一点:

var_dump(
    "product:".$productRow['productQty'], 
    "order:".$orderRow['quantity'], 
    "result:".($productRow['productQty'] - $orderRow['quantity'])
);

您希望收到

string 'product:20' (length=10)
string 'order:1' (length=7)
string 'result:19' (length=9)

但您会收到:

string 'product:20' (length=10)
string 'order:' (length=6)
string 'result:20' (length=9)

因此,您必须删除 user_id 过滤器以允许注册用户更新产品表中的数量

但是如果 user_id 不是订单的创建者并且对应于最后一个修饰符用户,则您必须在更新状态和确认日期时更新同一语句行中的 user_id 值

希望这可以消除您的疑虑并解决您的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM