Tengo un carrito de compras que usa cookies, puede agregarle productos yendo a la página de detalles del producto y haciendo clic en agregar carrito. El script debe agregar +1 a la cantidad en el carrito de compras, cada vez que pueda hacer clic en agregar. No sé por qué, pero la cantidad se mantiene en 1 cada vez.

Básicamente, la pregunta es: ¿Por qué no actualiza la cantidad dentro de la cookie?

Product.php:

if(isset($_POST['add'])){
    if(!empty($_POST['m'])){

        if (isset($_COOKIE['cart'])){
            $cart = json_decode($_COOKIE['cart'], TRUE, 512, JSON_OBJECT_AS_ARRAY); // if cookie is set, get the contents of it
        } else{
            $cart = [];// else create an empty cart
        }    

        // append new product and add to cart
        $cart[$product['id']] = [];
        $cart[$product['id']]['m'] = empty($_POST['m']) ? 1 : $_POST['m'];
        if(!empty($cart[$product['id']]['quantity'])){
            $cart[$product['id']]['quantity'] += 1;
        } else {
            $cart[$product['id']]['quantity'] = 1;
        }

        setcookie('cart', json_encode($cart), time()+3600, '/');
    } else {
        $error = "U moet minimaal 1m invullen";
    }

}

También en el propio carrito de la compra, necesito poder modificar la cantidad, este valor puede ser sobrescrito

Shoppingcart.php:

if(isset($_COOKIE['cart'])){
    $cart = json_decode($_COOKIE['cart'], TRUE, 512, JSON_OBJECT_AS_ARRAY);
} else {
    $cart = [];
}
// dd($cart);

if(isset($_POST['remove'])){
    unset($cart[$_POST['item']]);
    setcookie('cart', json_encode($cart), time()+3600, '/');
}

$list = $model->selectMultipleById($cart, 'carpet');
0
Jorn Reed 22 feb. 2018 a las 17:08

2 respuestas

La mejor respuesta

Prueba esto:

// append new product and add to cart

//first test if you have the id in your cookie. if so: update qty +1
if(!empty($cart[$product['id']])){
    $cart[$product['id']]['quantity'] += 1;
} 
//else create a new item in the cookie
else {
    $cart[$product['id']] = [];
    $cart[$product['id']]['quantity'] = 1;
}
//now $cart[$product['id']]['m'] always exists, so you can update m
$cart[$product['id']]['m'] = empty($_POST['m']) ? 1 : $_POST['m'];
0
Michel 22 feb. 2018 a las 15:07

Esto es lo que intenté, pero parece que me repito con mi código.

if(isset($_COOKIE['cart'][$product['id']])){
                $cart[$product['id']]['m'] = empty($_POST['m']) ? 1 : $_POST['m'];
                if(!empty($cart[$product['id']]['quantity'])){
                    $cart[$product['id']]['quantity'] += 1;
                } else {
                    $cart[$product['id']]['quantity'] = 1;
                }
            } else {
                $cart[$product['id']] = [];
                $cart[$product['id']]['m'] = empty($_POST['m']) ? 1 : $_POST['m'];
                $cart[$product['id']]['quantity'] = 1;
            }
0
Jorn Reed 22 feb. 2018 a las 15:19