php - 如何更新所购买产品的库存
问题描述
我目前正在处理商店页面,并且正在使用 PayPal Smart Button 进行付款。一旦付款被批准,我的库存数量就会减少。然而,当我付款时,它并没有减少所购买商品的库存,而是减少了数据库中每件商品的库存。我可以做些什么来减少所购买商品的库存?
这是我的代码。
view_product.php:
<?php
include 'pdo_connect.php';
$product_id = $_GET['product'];
$stmt = $db->prepare("SELECT * FROM products Where id = :id");
$stmt->bindParam(':id', $product_id );
$stmt->execute();
while($row = $stmt->fetch()){
$stock = $row['stock'];
$id = $row['ID'];
if ($stock > 0){
echo
"<script>
paypal.Buttons({
style: {
shape: 'rect',
color: 'blue',
layout: 'vertical',
label: 'paypal',
locale: 'en_CY'
},
createOrder: async function(data, actions) {
let stock = (await fetch('get_current_stock.php')).json();
let currentStock = stock['current'];
//may use amoutTryingToOrder instead of 1
if (currentStock < 1) {
alert('Out of stock, sorry :(');
return false;
}
return actions.order.create({
purchase_units: [{
amount: {
value: ". $row['paypal_price'] .",
currency: 'EUR'
}
}]
});
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
//alert('Transaction completed by ' + details.payer.name.given_name + '!');
alert('Your payment has been processed!');
localStorage.clear();
window.location.href = 'http://localhost/website/thankyou.php';
const formData = new FormData();
formData.append('amountOrdred', 1);
fetch('update_stock.php', {
method: 'POST',
body: formData
});
})
}
}).render('#paypal-button-container');
</script>";
}
else{
echo "Out of stock";
}
}
?>
update_stock.php:
<?php
include 'pdo_connect.php';
$id = $_GET['ID'];
$sql = "UPDATE products SET stock = stock - 1 WHERE stock > 0 and ID = :id";
$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$_POST['amountOrdered'];
?>
先感谢您!
解决方案
这不是有效的 SQL:
UPDATE products WHERE id = :id SET stock = stock - 1 WHERE stock > 0
此查询中有两个WHERE
子句,SQL 不允许。你可能的意思是:
UPDATE products SET stock = stock - 1 WHERE stock > 0 and id = :id
推荐阅读
- swift - 使用 firebase ios 电子邮件登录
- ruby-on-rails - 从 init.d 服务脚本启动 rails 并加载正确版本的 ruby
- reactjs - 如何正确地将基于类的组件中的状态转换为使用 Hooks?
- wordpress - 客户电子邮件错误时未发送 Woocommerce 新订单电子邮件
- c# - 如何通过 ILogger 将日志写入 EventLog
在 Asp.net 核心? - objective-c - Sanboxed 应用程序,通过引用包含文件?
- javascript - 继承的原型函数不是函数
- python - 如何为 Graphviz 中的每个节点添加标签?
- sockets - 如何使用 Golang 在 IP 标头中为 TCP 连接设置 ToS 字段
- windows - 使用批处理脚本在文本文件中的特定行号处插入文本