如何更新所购买产品的库存

Posted

技术标签:

【中文标题】如何更新所购买产品的库存【英文标题】:How update stock of product being purchased 【发布时间】:2020-11-15 12:33:03 【问题描述】:

我目前正在处理商店页面,并且正在使用 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 并且不使用它 【参考方案1】:

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

【讨论】:

是的,这是正确的,但没有解决我的问题。库存量依然没有减少

以上是关于如何更新所购买产品的库存的主要内容,如果未能解决你的问题,请参考以下文章

Odoo与浪潮合资研发PS Cloud之如何管理你不拥有的股票

是否可以在数据库中跟踪库存并更新使用 Paypal 进行的购买的商品数量?

产品更新后的 Woocommerce 获取库存

计算产品库存的加权平均成本

如何将变体库存状态添加到 Woocommerce 产品变体下拉列表

更新 WooCommerce 可变产品变化库存数量问题