【发布时间】:2023-03-10 19:36:01
【问题描述】:
我目前正在处理商店页面,并且正在使用 PayPal 智能按钮进行付款。一旦付款被批准,我的库存数量就会减少。但是,当我付款时,它并没有减少所购买商品的库存,而是减少了数据库中每件商品的库存。我可以做些什么来减少所购买商品的库存?
这是我的代码。
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'];
?>
提前谢谢你!
【问题讨论】:
-
formData 确实似乎将 ID 作为 id 的值,只有 'amountOrdred', 1 所以你的更新将不起作用
-
@nbk 这应该解决问题吗? formData.append('amountOrdred', 1, 'ID', $row[ID]);
-
你应该早点调试过代码,但是它会解决你添加 ID 的问题我仍然不明白为什么你有 amountOrdred 并且不使用它
标签: php mysql paypal payment-gateway