2012-02-13 41 views
2

人民 我想建立一個購物車,所以我必須通過ID,數量和LOCATION_ID的功能。在函數中,如果找到類似的id和location_id,我會查看傳入的id和location_id。我會+1的項目。但是,如果我使用數組中的函數,它不起作用。 下面是另一個函數我建立以測試變量傳遞給的foreach內起作用。 但就是不說第一變量i過去了。它只會保存最新的變量。的Cookie中的foreach不救

下面是我的功能代碼:

static public function test($id , $per_min, $location_id_cart = 0){ 

    echo $new_cart = $id.'-'.$per_min.'-'.$location_id_cart; 
    if(isset($_COOKIE['cart_item'])){ 
     $last = $_COOKIE['cart_item']; 
     $testing = $last.','.$new_cart; 
    }else{ 
     $testing = $new_cart; 
    } 

    $set = setcookie("cart_item", $testing, time()+3600); 
    var_dump($_COOKIE); 
} 

下面是我的代碼調用該函數:

$id = 125; 
    $multi_location = array(636 , 789); 
    $multi_quantity = array(); 
    $multi_quantity[636] = 5; 
    $multi_quantity[789] = 10; 
    $array_key = array_keys($multi_quantity); 
    foreach($array_key as $o){ 
     if(!in_array($o , $multi_location)){ 
      unset($multi_quantity[$o]); 
     } 
    } 
    $count = 0; 
    foreach($multi_location as $i){ 
     ZCart::test($id , $multi_quantity[$i], $i); 
    } 

我的結果:

'cart_item' => string '125-10-789' (length=10) 

我預期的結果:

'cart_item' => string '125-5-636,125-10-789' 

如果我刷新我的網頁,結果我得到的是:

'cart_item' => string '125-10-789,125-10-789,125-10-789,125-10-789,125-10-789,125-10-789,125-10-789' 

的cookie只能保存在數組中給出的最新值。它不會將125-5-636保存到cookie中。 爲什麼?任何人都可以幫我解決這個問題嗎?謝謝!

回答

1

試試下面的代碼:

static public function test($id , $per_min, $location_id_cart = 0){ 

    $new_cart = $id.'-'.$per_min.'-'.$location_id_cart; 
    if(isset($_COOKIE['cart_item'])){ 
     $last = $_COOKIE['cart_item']; 
     $testing = $last.','.$new_cart; 
    }else{ 
     $testing = $new_cart; 
    } 

    $set = setcookie("cart_item", $testing, time()+3600); 
    //This line deals with adding to the cookie while the script is running 
    $_COOKIE['cart_item'] = $testing; 

    //var_dump($_COOKIE); 
} 

我有一種感覺,$_COOKIE陣列未更新,當您使用setcookie(),這就是爲什麼我們與它下面的行手動更新。

此外,我會刪除var_dump()呼叫,同時回顯$new_cart變量,因爲這將停止setcookie()工作。相反,我會把它在調用代碼底部:

$id = 125; 
$multi_location = array(636 , 789); 
$multi_quantity = array(); 
$multi_quantity[636] = 5; 
$multi_quantity[789] = 10; 
$array_key = array_keys($multi_quantity); 
foreach($array_key as $o){ 
    if(!in_array($o , $multi_location)){ 
     unset($multi_quantity[$o]); 
    } 
} 
$count = 0; 
foreach($multi_location as $i){ 
ZCart::test($id , $multi_quantity[$i], $i); 
} 

var_dump($_COOKIE); 

如果要實現一個購物車,我強烈建議使用sessions,它允許你敏感的東西存放在服務器端走免受傷害,根據我的經驗,比起Cookie更容易工作!

另一種選擇是將用戶的購物車存儲在數據庫中,然後如果他們沒有登錄鏈接到具有存儲在cookie中的ID的購物車的鏈接。如果用戶關閉他們的瀏覽器,但保持Cookie的安全,這將允許購物車停留在周圍。我希望這是有道理的!

+0

OMG!有用!!!!非常感謝你!!! =) – 2012-02-13 09:59:17

+0

沒問題:)你明白爲什麼它不工作?我不是最好的解釋! – Darkzaelus 2012-02-13 10:00:00

+0

耶懂了。首先,我想用會話做購物車,但是在我的網站實現HTTPS後,所有會話都出錯了。因此我認爲Cookie比我的網站情況更安全。在https中創建的會話無法在http中訪問。嘗試從網絡的方法來解決它..但他們都沒有工作。 – 2012-02-13 10:22:58

0

,因爲你不使用數組或不同的變量。每次循環中調用函數時,它更新cart_item.It的價值在不同的變量亙古不變的儲值。

+0

我想結果是在餅乾裏面125-5-636,125-10-789 ..因此我沒有存儲在不同的變量中的值。 (isset($ _ COOKIE ['cart_item'])){ if lastset $ _COOKIE ['cart_item']; $測試= $持續 '' $ new_cart。; } 如果存在cookie,我會將cookie值與最新值結合使用。但問題是它不保存我的數組的第一個值.. – 2012-02-13 08:20:35

+0

,但如果你存儲值與數組不同索引,那麼你也可以實現你想要的結果.. 你可以使用implode函數來獲得你想要的字符串在o/p – 2012-02-13 08:22:38

+0

但我想通過我的$ id,$ multi_quantity [ $ i],$我一個接一個地加入到函數中。因爲我在做一個購物車..所以通過逐項傳遞物品,我能夠識別哪些是重複的東西,以便我可以增加數量。我給我的用戶複選框並輸入文本。他們檢查選項,他們想要並在輸入文本中輸入數量..這就是爲什麼我需要對我的數組進行foreach。 OMG! – 2012-02-13 08:33:21