我的数据库的库存计数一直从 28 开始?
Inventory count of my database keeps starting at 28?
我是编码新手,在我的代码中我无法更新我的数据库。
我正在使用 mysql 和 php 创建一个购物车,在购买商品时更新库存。购物车获取商品的产品 ID 并使用 GET 数组存储它。问题是有人购买了一件商品后,我的数据库中的库存可能没有调整。每次我购买商品时,库存计数总是从 28 开始,而不是从正确的库存量开始。购物车的代码是:
require 'connect.php';
require 'item.php';
if(isset($_GET['id'])){
$result = mysqli_query($con, 'select * from products where
id='.$_GET['id']);
$products = mysqli_fetch_object($result);
$item = new Item();
$item->id = $products->id;
$item->name = $products->name;
$item->price = $products->price;
$item->quantity = 1;
$_SESSIONS['id']=$_GET['id'];
// Check if the products exists in the cart
$index = -1;
$cart = unserialize(serialize($_SESSION['cart']));
for($i=0; $i<count($cart); $i++)
if($cart[$i]->id==$_GET['id'])
{
$index = $i;
break;
}
if($index==-1)
$_SESSION['cart'][] = $item;
else{
$cart[$index]->quantity++;
$_SESSION['cart'] = $cart;
}
}
// Delete products in cart
if(isset($_GET['index'])){
$cart = unserialize(serialize($_SESSION['cart']));
unset($cart[$_GET['index']]);
$cart = array_values($cart);
$_SESSION['cart'] = $cart;
}
if(array_key_exists('submit2', $_POST))
{
$results = mysqli_query($con, "select * from products");
$sql="";//init
while($products=mysqli_fetch_object($results)){
for($i=0; $i<count($cart); $i++){
$idcart=$cart[$i]->id;
$quantity= $products->quantity;
$cartquantity = $cart[$i]-> quantity;
$sql= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';";//u need this to append the query
session_destroy(); }//end for
}//end while
if ($con->multi_query($sql) === TRUE) {//use multi_query
header("location: thankyou.php");
} else {
echo "Error updating record: " . $con->error;
}
$con->close();
我认为问题出在这段代码中。 $sql= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';";.任何帮助将不胜感激。谢谢!
您可以直接在更新中使用数量值
$sql = "UPDATE products SET quantity= quantity - ? WHERE id= ? ;"
$stmt = $con->prepare($sql);
$stmt->bind_param('ii', $cartquantity, $idcart, );
$stmt->execute();
关于更新购物车数量的整个逻辑似乎不寻常。您有一个循环遍历所有产品,然后根据购物车的 ID 和产品的数量更新某种相关的数据库记录。没有尝试将产品 ID 中的数量与购物车中的 ID 相匹配。
这段代码只是循环遍历购物车并减少每行匹配产品的数量,它还在循环之前准备了语句并且只为每一行执行一次...
if(array_key_exists('submit2', $_POST))
{
$sql = "UPDATE products
SET quantity = quantity - ?
WHERE id= ?";
$stmt = $conn->prepare($sql);
foreach ( $cart as $item ){
$stmt->bind_param('ii', $item->quantity, $item->id );
$stmt->execute();
}//end foreach
session_destroy();
}//end if
您忘记将您的多查询 sql 连接到此代码行:
$sql= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"
请像这样放置连接运算符:
$sql .= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"
或者像这样:
$sql= $sql."UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"
我注意到您在循环后执行更新 SQL 这很好,但没有串联,您只执行循环中的最后一个查询。
我是编码新手,在我的代码中我无法更新我的数据库。 我正在使用 mysql 和 php 创建一个购物车,在购买商品时更新库存。购物车获取商品的产品 ID 并使用 GET 数组存储它。问题是有人购买了一件商品后,我的数据库中的库存可能没有调整。每次我购买商品时,库存计数总是从 28 开始,而不是从正确的库存量开始。购物车的代码是:
require 'connect.php';
require 'item.php';
if(isset($_GET['id'])){
$result = mysqli_query($con, 'select * from products where
id='.$_GET['id']);
$products = mysqli_fetch_object($result);
$item = new Item();
$item->id = $products->id;
$item->name = $products->name;
$item->price = $products->price;
$item->quantity = 1;
$_SESSIONS['id']=$_GET['id'];
// Check if the products exists in the cart
$index = -1;
$cart = unserialize(serialize($_SESSION['cart']));
for($i=0; $i<count($cart); $i++)
if($cart[$i]->id==$_GET['id'])
{
$index = $i;
break;
}
if($index==-1)
$_SESSION['cart'][] = $item;
else{
$cart[$index]->quantity++;
$_SESSION['cart'] = $cart;
}
}
// Delete products in cart
if(isset($_GET['index'])){
$cart = unserialize(serialize($_SESSION['cart']));
unset($cart[$_GET['index']]);
$cart = array_values($cart);
$_SESSION['cart'] = $cart;
}
if(array_key_exists('submit2', $_POST))
{
$results = mysqli_query($con, "select * from products");
$sql="";//init
while($products=mysqli_fetch_object($results)){
for($i=0; $i<count($cart); $i++){
$idcart=$cart[$i]->id;
$quantity= $products->quantity;
$cartquantity = $cart[$i]-> quantity;
$sql= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';";//u need this to append the query
session_destroy(); }//end for
}//end while
if ($con->multi_query($sql) === TRUE) {//use multi_query
header("location: thankyou.php");
} else {
echo "Error updating record: " . $con->error;
}
$con->close();
我认为问题出在这段代码中。 $sql= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';";.任何帮助将不胜感激。谢谢!
您可以直接在更新中使用数量值
$sql = "UPDATE products SET quantity= quantity - ? WHERE id= ? ;"
$stmt = $con->prepare($sql);
$stmt->bind_param('ii', $cartquantity, $idcart, );
$stmt->execute();
关于更新购物车数量的整个逻辑似乎不寻常。您有一个循环遍历所有产品,然后根据购物车的 ID 和产品的数量更新某种相关的数据库记录。没有尝试将产品 ID 中的数量与购物车中的 ID 相匹配。
这段代码只是循环遍历购物车并减少每行匹配产品的数量,它还在循环之前准备了语句并且只为每一行执行一次...
if(array_key_exists('submit2', $_POST))
{
$sql = "UPDATE products
SET quantity = quantity - ?
WHERE id= ?";
$stmt = $conn->prepare($sql);
foreach ( $cart as $item ){
$stmt->bind_param('ii', $item->quantity, $item->id );
$stmt->execute();
}//end foreach
session_destroy();
}//end if
您忘记将您的多查询 sql 连接到此代码行:
$sql= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"
请像这样放置连接运算符:
$sql .= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"
或者像这样:
$sql= $sql."UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"
我注意到您在循环后执行更新 SQL 这很好,但没有串联,您只执行循环中的最后一个查询。