繁体   English   中英

我的数据库的库存数是否从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 =“更新产品SET数量='$ quantity'-”。$ cartquantity。“ 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';"

请像这样放置concat运算符:

$sql .= "UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"

或像这样:

$sql= $sql."UPDATE products SET quantity='$quantity' - ".$cartquantity." WHERE id='$idcart';"

我注意到您正在执行更新SQL after循环,这很好,但是如果没有串联,您只会在循环中执行最后一个查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM