使用PHP更新库存计数

时间:2018-03-08 18:35:42

标签: php mysql mysqli

我正在为网站编写购买系统。我有不同产品的页面,用户可以点击购买按钮将其发送到购买页面,购买页面的链接包括项目的变量,以便我可以在购买页面上显示他们的订单详细信息。

其中一个变量是$ item_stock_count。我有一个"买"购买页面上的按钮将库存变量减少1,然后执行MySQLi查询以更新数据库的库存表中的库存值。问题是,如果我在股票没有变化后按下按钮,那么股票只会减少我第一次单击“买入”按钮。查询仍然被执行但没有行受到影响。

我在&#34之后减少了股票变量; if(isset($ _ POST [' Buy']))#34;所以每当按下按钮时,肯定会在if语句中按下代码应该生效。

购买页面:

<?php
$item_name = $_GET['item_name'];                  
$item_code = $_GET['item_code'];
$item_price = $_GET['item_price'];
$item_stock_count = $_GET['item_stock_count'];

$promo_approved = false;
$discount;
$_SESSION['item_price'];

//Product purchase table//
echo 
"<table>",
    "<tr>",
        "<th>Title</th>",
        "<th>Item Price</th>",
        "<th>Item Code</th>",
    "</tr>",
    "<tr>",
        "<th> $item_name  </th>",
        "<th> $item_price </th>",
        "<th> $item_code </th>",
    "</tr>",
"</table>";


//Is the login variable set? error prevention//
if(isset($_SESSION['loggedin'])){
    //Is the customer logged in?//
    if ($_SESSION['loggedin'] == true){
        //Is the product in stock?//

            //Connect to db//
            $connect = mysqli_connect('localhost', 'root', 'root')
            or die ("Failed to connect to MySQL Database:" . mysqli_connect_error);         

            $db = mysqli_select_db($connect, 'sm17977')
            or die("Could not open the Database");

            if($item_stock_count > 0){
            //If Buy button has been clicked//
                if(isset($_POST['Buy'])){
                    //Reduce stock count by 1//

                    //Stock reduction query//
                    $reduce_stock = 
                    "update inventory
                    set item_stock_count = $item_stock_count
                    where item_code = '$item_code'";

                    mysqli_query($connect, $reduce_stock);

                    echo "</br>Stock Count: " . $item_stock_count;
                    $item_stock_count = $item_stock_count - 1;

                    //Did the query update the stock?//
                    if(mysqli_affected_rows($connect) == 1){
                        echo "</br>Stock Updated.</br>";
                        echo "</br>New Stock Count: " . $item_stock_count;
                    }
                    //If the query did not update the stock//
                    else{
                        echo "</br> Failed to update stock.";
                        echo mysqli_error($connect);
                        echo "</br>New Stock Count: " . $item_stock_count;
                    }
                }
            }
        //If the item is not in stock//
        else{
            echo
            "<script>
                    alert('Item currently unavailable.');
            </script>";
        }
    }
    //If the user isn't logged in//
    else {
        echo
        "<p>You must be logged in to make purchases.</p>";
    }               
}
?>
            </br></br>
            <form method = "POST">
                </br><p>Promotional Code:</p>
                <input id = "code" type = "text" name = "promo" />
                </br>
                <input name = "Buy" value = "Buy" type = "submit" id = 'purchase_btn' <?php if($_SESSION['loggedin'] == false){ ?> disabled <?php }?>/>
            </form>

</html>

我也试过移动代码来减少变量,但没有任何变化,因为我确定减少代码必须位于Buy按钮if if语句的开头,以便查询准确更新,我不确定如何解决这个问题。

因此,简而言之,购买按钮仅在第一次减少库存计数变量,之后的后续点击不会更改库存。

我确定我可能错过了一些非常简单的事情,我很感激任何帮助。

编辑:此代码是我不能使用框架的作业的一部分,并且不打算用于专业用途,应该明确说明。

1 个答案:

答案 0 :(得分:0)

您的表单方法设置为“发布”,并且您使用if(isset($_POST['Buy'])){验证按钮单击但是在创建SQL语句时,您使用的$item_code先前由$item_code = $_GET['item_code'];设置。在帖子请求期间,$_GET变量将始终为空。

如果您同时使用get和post请求来使用此界面,那么您应该更改为$_REQUEST,否则您希望通过始终使用$_POST进行整合;