我正在为网站编写购买系统。我有不同产品的页面,用户可以点击购买按钮将其发送到购买页面,购买页面的链接包括项目的变量,以便我可以在购买页面上显示他们的订单详细信息。
其中一个变量是$ 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语句的开头,以便查询准确更新,我不确定如何解决这个问题。
因此,简而言之,购买按钮仅在第一次减少库存计数变量,之后的后续点击不会更改库存。
我确定我可能错过了一些非常简单的事情,我很感激任何帮助。
编辑:此代码是我不能使用框架的作业的一部分,并且不打算用于专业用途,应该明确说明。
答案 0 :(得分:0)
您的表单方法设置为“发布”,并且您使用if(isset($_POST['Buy'])){
验证按钮单击但是在创建SQL语句时,您使用的$item_code
先前由$item_code = $_GET['item_code'];
设置。在帖子请求期间,$_GET
变量将始终为空。
如果您同时使用get和post请求来使用此界面,那么您应该更改为$_REQUEST
,否则您希望通过始终使用$_POST
进行整合;