2016-02-02 245 views
1

因此,我设置了我的购物车,以使用GET功能接收有关添加的每个项目的特定信息。但是,在读取数据库的实现中,如果添加另一个项目,这些值将会变得相同。 如果我添加椅子1,然后再次椅子1,它增加了椅子1的总数,说有2椅子1的。但是,如果我再添加椅子2,则会有一个新的条目,但具有所有椅子的价值。PHP购物车阵列

阵列输出

Array ([0] => Array ([item_id] => 2 [quantity] => 1) [1] => Array ([item_id] => 4 [quantity] => 7)) 

采购项目区

enter image description here

数据库:

<?php 
include_once('config/database.php'); 
include_once('object/chair.php'); 
$database = new Database(); 
$conn = $database->getConnection(); 
$chair = new Chair($conn); 
$chair->id = $_GET['detailsid']; 
$stmt = $chair->readDetails(); 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
?> 

添加到购物车:

<div class="addtocart"> 
       <!--<div class="button"> 
       Add to cart 

       </div>--> 
       <div class="button"> 
       <form id="form1" name="form1" method="post" action="cart.php?detailsid=<?php echo $row['ID'];?>"> 
      <input type="hidden" name="pid" id="pid" value="<?php echo $row['ID'];?>"/> 
      <input type="submit" name="button" id="button" value="Add to Shooping Cart"/>   

        </form> 

车温控功能:

<?php 

session_start(); 
error_reporting(E_ALL); 
ini_set('display_errrors', '1'); 
include_once 'includes/db_conx.php'; 
if (isset($_POST['pid'])) 
{ 
    $pid  = $_POST['pid']; 
    $wasFound = false; 
    $i  = 0; 
    if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) 
    { 
     $_SESSION["cart_array"] = array(1 => array("item_id" => $pid, "quantity" => 1)); 
    } 
    else 
    { 
     foreach ($_SESSION["cart_array"] as $each_item) 
     { 
      $i++; 
      while (list($key, $value) = each($each_item)) 
      { 
       if ($key == "item_id" && $value == $pid) 
       { 
        array_splice($_SESSION["cart_array"], $i - 1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1))); 
        $wasFound = true; 
       } 
      } 
     } 
     if ($wasFound == false) 
     { 
      array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1)); 
     } 
    } 
} 
if (isset($_GET['cmd']) && $_GET['cmd'] == "emptycart") 
{ 
    unset($_SESSION["cart_array"]); 
} 

//render cart 
$cartOutput = ""; 
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) 
{ 
    $cartOutput = "<h2 align=center'>Your shopping cart is empty</h2>"; 
} 
else 
{ 
    $i = 0; 
    foreach ($_SESSION["cart_array"] as $each_item) 
    { 
     $i++; 
     $item_id = $each_item['item_id']; 

     include_once('config/database.php'); 
     include_once('object/chair.php'); 
     $database = new Database(); 
     $conn  = $database->getConnection(); 
     $chair  = new Chair($conn); 
     $chair->id = $_GET['detailsid']; 
     $stmt  = $chair->readDetails(); 
     while ($row  = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
      $product_name = $row['chair_name']; 
      $price  = $row['PRICE']; 
     } 

     $pricetotal = $price * $each_item['quantity']; 
     $cartOutput .="<tr>"; 
     $cartOutput .= "<td>" . $product_name . "</td>"; 
     $cartOutput .= "<td>" . $price . "</td>"; 
     $cartOutput .= "<td>" . $each_item['quantity'] . "</td>"; 
     $cartOutput .= "<td>" . $pricetotal . "</td>"; 
     $cartOutput .= "<td>X</td>"; 
     $cartOutput .="</tr>"; 
    } 
} 
+0

显示处理将项目添加到'$ _SESSION ['cart_arrray']' – Fabricator

+0

的代码请显示$ _SESSION [“cart_array”]的代码 - 它可能会在下面创建一个新项目而不是合并数量,因为数组键是diff – rubberchicken

+0

好的没问题 –

回答

1

更新:

一个可能的修复可能是细节ID添加到会话阵列像这样:

if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) 
{ 
    $_SESSION["cart_array"] = array(1 => array("item_id" => $pid, "quantity" => 1, "details_id" => $_GET['detailsid'])); 
} 
else 
{ 
    foreach ($_SESSION["cart_array"] as $each_item) 
    { 
     $i++; 
     while (list($key, $value) = each($each_item)) 
     { 
      if ($key == "item_id" && $value == $pid) 
      { 
       array_splice($_SESSION["cart_array"], $i - 1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1, "details_id" => $_GET['detailsid']))); 
       $wasFound = true; 
      } 
     } 
    } 
    if ($wasFound == false) 
    { 
     array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1, "details_id" => $_GET['detailsid'])); 
    } 
} 

然后显示购物车使用时该值代替$_GET一个:

$chair  = new Chair($conn); 
$chair->id = $each_item['details_id']; 
$stmt  = $chair->readDetails(); 

您正在使用提取的$_GET['detailsid']椅子的细节 - 这将永远是每个回路编号相同:

$chair  = new Chair($conn); 
$chair->id = $_GET['detailsid']; 
$stmt  = $chair->readDetails(); 

如果这是$item_id代替你获取正确的椅子的细节?

+0

是的,我有点想了很多,但我不知道如何通过除GET以外的变种。该ID是sql文件中每个项目的唯一标识符。虽然$ item_id仅适用于购物车中的每件商品,因此您可以删除每件商品。当“添加到购物车”按钮被击中时,ID被作为正在发送给detailid。 –

+0

您能否将详细信息与其他详细信息一起添加到购物车阵列中?'array_push($ _ SESSION [“cart_array”],array(“item_id”=> $ pid,“quantity”=> 1,“detailsid”=> 99));' –

+0

我已更新我的回答,更多详细信息 –