首页 > 解决方案 > 如何更新所购买产品的库存

问题描述

我目前正在处理商店页面,并且正在使用 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'];
    
?>

先感谢您!

标签: phpmysqlpaypalpayment-gateway

解决方案


这不是有效的 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

推荐阅读