0

Firefox で正常に動作する次のコードを作成しました。

// add product
if( isset($_GET['add']) ) {

$pointer = 1;

foreach ($_COOKIE['cart'] as $posit => $value) {
    $pointer = $posit+1;
}

setcookie('cart['.$pointer.']', $_GET['add'] , time() + 60*60*24*$cookie_cart , '/' );
header('Location: cart.php');
}

問題は、私が Safari で試したときでした (したがって、他のブラウザーでも同じ問題が発生する可能性があると思います。関数 foreach() が実行されると、Safari は Firefox とは逆の順序で Cookie を読み取るため、次の Cookie としましょうが定義されています: カート[1]、カート[2]、カート[3]. 1+1 になり、新しい製品を追加するたびにカート [2] として保存します。

これを修正するために多くの方法を試しましたが、これまでのところ成功していません。

ありがとう。

4

2 に答える 2

0

ループさえ必要ないように見えます。

$position = count($_COOKIE['cart'])+1;
setcookie('cart['.$position.']',$_GET['add'] , time() + 60*60*24*$cookie_cart , '/' );

編集:

さらに良いのは、次のようなものです。

function addItem($id) {
   $cart = unserialize($_COOKIE['cart']);
   $cart[] = $id;
   setcookie('cart', serialize($cart) , time() + 60*60*24*$cookie_cart , '/' );
}

function removeItem($id) {
   $cart = unserialize($_COOKIE['cart']);
   $cart = array_diff($cart, array($id));
   setcookie('cart', serialize($cart) , time() + 60*60*24*$cookie_cart , '/' );
}

function getCart() {
   $cart = unserialize($_COOKIE['cart']);
   return $cart;
}

そして、これらの機能を使用してカートを操作できます。

于 2013-05-01T22:49:01.497 に答える
0

次のキーを取得するには、次のような単純なものを使用します。

//initial value
$newKey = 0;
//if cart is set and is an array
if(isset($_COOKIE['cart']) && is_array($_COOKIE['cart'])){
    //get the max value from the keys and add 1
    $newKey = max(array_keys($_COOKIE['cart']))+1;
}
于 2013-05-01T22:57:32.050 に答える