Ik heb op een product pagina een knop die het desbetreffende product toevoegd aan een cart array. Vervolgens komt die array in een cookie terrecht.

<?php
$cart = [];
$cart[$product['id']] = [];
$cart[$product['id']]['product_name'] = $product['name'];

if(isset($_POST['add'])){
setcookie('cart', serialize($cart), time()+3600);
$cart = unserialize($_COOKIE['cart']);
dd($cart);
}
?>

Hoe zorg ik er voor dat de cookie niet wordt overschreven maar wordt geupdate? Heb namelijk nog nooit echt goed met cookies gewerkt.
Waarom zou je geen sessies gebruiken? Daar kan je hele array's in plaatsen en werkt stukken makkelijker.

Een bekende pitfall in jouw code. De waarde uit $_COOKIE is pas beschikbaar na een refresh, en niet direct.
Mensen hadden mij juist aanbevolen om cookies te gebruiken, omdat een sessie wordt afgebroken bij het sluiten van de browser en een cookie niet.

Achteraf is het de bedoeling dat hij het naar de shopping-cart.php stuurt dus daar komt het uiteindelijk te staan.
Dan kan je net zo goed de sessie gewoon laten behouden zodra iemand de browser sluit met session.cookie_lifetime.

Als je zonodig met Cookies wilt werken kan je ook een unieke hash opslaan, en de cart opslaan in de database. Dan kan je de boel een eenvoudig overhevelen naar een account.

<?php
	
	/*
	 * Cart cookie nu altijd te benaderen via de $_COOKIE var.
	 */
	if (isset($_COOKIE['cart'])) {
		$_COOKIE['cart'] = unserialize($_COOKIE['cart']);
	} else {
		$_COOKIE['cart'] = [];
	}

	/*
	 * Product toevoegen, opslaan in cookie.
	 */
	if (isset($_POST['add'])) {
		$_COOKIE['cart']['ID VAN PRODUCT'] = [
			'id'		=> 'ID VAN PRODUCT',
			'amount'	=> 'AANTAL PRODUCTEN'
		];

		setcookie('cart', serialize($_COOKIE['cart']), time() + 3600);
	}

	/*
	 * Product verwijderen, opslaan in cookie.
	 */
	if (isset($_POST['remove'])) {
		if (isset($_COOKIE['cart']['ID VAN PRODUCT'])) {
			unset($_COOKIE['cart']['ID VAN PRODUCT']);
		}

		setcookie('cart', serialize($_COOKIE['cart']), time() + 3600);
	}

	/*
	 * Alle producten verwijderen, opslaan in cookie.
	 */
	if (isset($_POST['remove-all'])) {
		$_COOKIE['cart']  = [];

		setcookie('cart', serialize($_COOKIE['cart']), time() + 3600);
	}

?>


Maar zoals Arien al zei zou ik een gebruiken van een DB.
Jorn Reed op 14/02/2018 20:35:27

Mensen hadden mij juist aanbevolen om cookies te gebruiken, omdat een sessie wordt afgebroken bij het sluiten van de browser en een cookie niet.

Ik heb mijn browser zo ingesteld dat bij afsluiten alle cookies, geschiedenis, etc. wordt verwijderd. Cookie of sessie zijn dus beide niet meer beschikbaar na afsluiten browser.

Vraag is wat je wilt bewaren en hoe. Op pc gebruiker lijkt me niet de plek.
Is het bijwerken van een super global eigenlijk handig, ik zie het niet vaak gebeuren, meestal zie ik dat er een array in de setcookie() functie wordt gegooid, en mocht de array geleegd worden, zal dat bij de array gebeuren en niet bij de super global $_COOKIE. Ik kan het mis hebben hoor, maar daarom vraag ik het ook :)
Jorn Reed op 15/02/2018 02:38:41
Is het bijwerken van een super global eigenlijk handig, ik zie het niet vaak gebeuren.

Dan heb je nog niet veel gezien. Superglobals vormen onder andere een abstractiemechanisme. Een die overal toegankelijk is in code en scopes overstijgt. Per superglobal verschilt het ook wat je precies aan het doen bent, zo manipuleer je met $_COOKIE['cart'] (indirect) het cart-cookie. De superglobal is slechts het medium via welke je andere dingen manipuleert.

Reageren