[英]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.