2017-09-06 111 views
0
if (!empty($_GET['action'])) { 
    $j = $_GET['id_']; 
    switch($_GET['action']) { 
     case "add": 
     $query = "select * from ogl where id = $j"; 
     $result = mysqli_query($conn, $query); 
     $row = mysqli_fetch_assoc($result); 
     $array = array($row["id"]=>array('seller'=>$row["seller"], 
     'name'=>$row["name"], 'cpu'=>$row["CPU"], 'size'=>$row["size"], 
     'price'=>$row["price"], 'img'=>$row["img"])); 

     if (empty($_SESSION["cart_item"])) { 
      $_SESSION["cart_item"] = $array; 
     } else { 
      $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"], $array); 
     } 
     break; 
    } 
} 

問題是,它只添加一個項目,通過替換以前添加的項目。每個項目的ID都是通過它們的按鈕 - GET方法發送的。問題是什麼?謝謝。PHP購物車,添加多個項目

+0

https://stackoverflow.com/help/how-to-ask - 閱讀本文,然後您可以編輯此問題。我不確定你想要完成什麼,也不應該爲了幫助你解決問題而弄清楚。給你的問題多一點背景。如果你願意,我會收回我的投票;) – Jase

回答

0

您正在將數組的內容合併到名爲「cart_item」的現有數組中。但是,數組中的任何鍵只能存在一次。所以通過合併另一個購物車項目,你已經覆蓋已經存在的那個。

你能處理這樣的:

if (isset($_SESSION["cart_item"])) { 
     // make sure the cart_item key exists before adding anything to it. 
     $_SESSION['cart_item'] = array(); 
     $_SESSION["cart_item"][] = $array; 
    } 
    else { 
     $_SESSION["cart_item"][] = $array; 
    } 

然而,這意味着您可以添加兩次相同的產品。由於一切都有自己的ID,你可以考慮使用$ row ['id]作爲項目的關鍵。

0

爲什麼不把它推入數組而不是替換它?

替換這一行(並同爲下面的代碼在else)

$_SESSION["cart_item"] = $array; 

通過

$_SESSION["cart_item"][$j] = $array; 

或更好:

$_SESSION['cart'][$j] = $array; 

確保你定義$ _SESSION ['cart']在會議開始附近的某處

0

使存儲在會話中的購物車成爲一個字符串,元素由一個字符分隔,如';'而這些元素本身可以是由不同字符分隔的列表,如','。

會話/餅乾看起來像:

<id>,<seller>,<name>,<CPU>,<price>,<img>; 
<id>,<seller>,<name>,<CPU>,<price>,<img>; 
<id>,<seller>,<name>,<CPU>,<price>,<img> 

這意味着,你可以拆分字符串「;」然後用「,」表示該數組中的每個元素。

要實現這一點,你會關掉這個:

$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"], $array); 

此:

$_SESSION["cart_item"] .= $row["seller"] . "," . $row["CPU"] . "," //and so on 

另外,要小心使用sql_injection。您可以將「id_」參數更改爲SQL查詢並損壞數據庫。