2016-02-23 130 views
2

我跟着一個php購物車指南,我達到了一個部分,當我將產品添加到購物車時,每次單擊添加到購物車鏈接時產品都會增加,但我的購物車不是,它只是顯示1並且不會進一步增加。當我回到產品(index.php)頁面時,購物車沒有保存這些數據,指南說它應該但我的沒有。每次按加入購物車鏈接時,我怎樣才能讓它增加?任何人都可以看到我錯過了或做錯了什麼?爲什麼不會增加?

的index.php:

<?php 
require("connect.php"); 
$sql="SELECT * FROM elec_guit ORDER BY name ASC"; 
$query=mysql_query($sql); 

while ($row=mysql_fetch_array($query)) { 
?> 

    <div class="price1"> 
     <p> 
      $<?php echo $row['price'] ?> 
      <br> 
      <br> 
      <!-- This is correct now --> 
      <a href="cart.php?add=<?php echo $row['id_product'] ?>">Add to cart</a> 
     </p> 
    </div> 


<?php 

} 

>

這是cart.php:

<?php 

session_start(); 


$page = 'cart.php'; 

include ('connect.php'); 

if (isset($_GET['add'])) { 
$_SESSION['cart_'.$_GET['add']]=+'1'; 

} 



    echo $_SESSION ['cart_1']; 


?> 

UPDATE

行,所以這一切都整理現在,我試圖在另一個LAMP堆棧和它的工作原理,地雷是不正常的地方,感謝所有幫助,努力工作這一個

+1

'$一個很好的指南_SESSION ['cart _'。$ _ GET ['add']] = +'1';'是錯誤的,您的意思是''_ _ESSION ['cart_'。$ _ GET ['add']] + = 1;'? –

+0

好的,你需要先檢查它是否設置。所以'$ _SESSION ['cart _'。$ _ GET ['add']] =!isset($ _ SESSION ['cart _'。$ _ GET ['add']])? 1:$ _SESSION ['cart _'。$ _ GET ['add']] + 1;' –

+0

任何變化都沒有改變@timhysniu – James

回答

0
$_SESSION['cart_'.$_GET['add']] = intval($_SESSION['cart_'.$_GET['add']]) + 1; 
+0

It仍然不會增加數量,並且一旦我回到索引 – James

0

一般來說,session_start()將開始尚未開始的會話或讓您訪問現有會話。當您離開購物車頁面並回到索引頁面(沒有session_start())時,您將無法看到會話變量。

您創建的腳本創建了$_SESSION數組的'cart_X'元素,其中X是$_GET['add']中的任意值,對應於產品ID。考慮分離其中包含的對象車如下:

session_start(); 
$product_id = $_GET['add']; 
if (isset($_SESSION['cart'][$product_id]){ 
    $_SESSION['cart'][$product_id]++; 
} else { 
    $_SESSION['cart'][$product_id] = 1; 
} 

注意上面不檢查假輸入(總是一個好主意來驗證輸入服務器端和客戶端)。除此之外,mysql_*功能已過時,如果可能,請移至mysqli_*

而不是echo $_SESSION['cart_1']嘗試標籤print_r($_SESSION['cart'])<pre>之間,看看有什麼在購物車中,並在您的索引頁把session_start()以及如果需要的變量有訪問。

0

+ '1' 定投 '1' 的積極INT(1):P

看看這是什麼給你,

var_dump(+1,-1,+'1',-1,-'1'); 

從而

$_SESSION['cart_'.$_GET['add']]=+'1'; 

是一樣的as

$_SESSION['cart_'.$_GET['add']]=(int)'1'; 

你基本上在做

$_SESSION['cart_'.$_GET['add']]=1; 
$_SESSION['cart_'.$_GET['add']]=1; 
$_SESSION['cart_'.$_GET['add']]=1; 

當你想要的是

​​

這裏還有其他問題與您的代碼,它的error_reporting(E_ALL);會告訴你 - $ SESSION ['cart'。$ _ GET ['add']]從不初始化,我知道,添加到一個未初始化的變量工作在PHP中,因爲PHP是愚蠢的,但你不應該這樣做,你會得到一個E_NOTICE錯誤。 可以正確初始化像這樣

if(!isset($_SESSION['cart_'.$_GET['add']])){//variable not initialized, initialize it. 
$_SESSION['cart_'.$_GET['add']]=1; 
} else { 
$_SESSION['cart_'.$_GET['add']]+=1; 
} 

和mysql_功能,因爲5.5.0已被棄用,你應該你的代碼移植到PDO或mysqli的,你會發現這裏http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

+0

更改= + 1到+ = 1對增量值沒有任何影響,數據就會丟失,我認爲實際問題出現在會話中,只要我離開頁面所有的數據被重置。有任何想法嗎? – James

+0

是的,最有可能的餅乾不會被正確加載或發送 – hanshenrik