Beste,

Ik ben bezig met een webwinkel. Nu ben ik aangekomen bij het plaatsen van producten in de winkelwagen en dit wil ik graag met cookies doen omdat sessies verlopen zodra je de browser sluit, en ik wil het graag ook nog in het winkelwagentje hebben staan als de bezoekers terugkomen.

Het enige wat in de cookies moet worden opgeslagen is de product_id en het aantal producten.
Nu loop ik vast bij het laatste, het lukt me wel om de coockies een "array" mee te geven ongeveer.
Eigenlijk wil ik:

Product[1]
id => 1
amount => 1


Alleen nu wil ik dus, dat als iemand bijvoorbeeld vier dezelfde producten toevoegt, de amount moet worden opgehoogd, alleen ik weet even niet hoe ik dat moet doen.

Iemand een idee?
Ik zou zoiets doen:
$producten = array(1 // product id
=> array('ammout'=>1));
dan kan je gewoon $producten[$productid]['ammount'] +=4; doen o.i.d.
Maar een cookie pakt geen arrays, alleen strings
achter elkaar plakken: |priduct1-aantal1|product2-aantal2|product3-aantal3|etc
Met explode kun je ze weer 'lodhalen'. Zie ook de tut over webwinkel hier op phphulp
Zie voorbeeld drie van [php]set_cookie[/php].
Of [php]serialize[/php] doen.
Ik heb ondertussen dit:


<?php
	
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
	
	//$callback_url	=	$_SERVER['HTTP_REFERER'];
	
	
	
	if(isset($_COOKIE['product']))
		{
			$productcount	=	count($_COOKIE['product']) +1;
			//setcookie("product[".$productcount."][id]", 1);
			echo $productcount.'<br /><br /><br />';
			
			for($i = 1; $i < $productcount; $i++)
				{
					foreach($_COOKIE['product'][$i] as $name => $value)
						{
							echo $name;
						}
				}
		}
	else
		{
			setcookie("product[1][id]", 1);
		}
	
	echo '<pre>';
	print_r($_COOKIE['product']);
	echo '</pre>';

?>


Nu moet ik nog zorgen dat ik de huidige ID vergelijk met alle records in de cookie product. Als ik een vergelijkbare ID heb gevonden kan ik de amount +1 doen.
Je doet te moeilijk denk ik

Als je gewoon $_koekje[product_id][amount] is het een stuk makkelijker
Het was inderdaad te moeilijk inmiddels al een andere opzet:


<?php
	
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
	
	//$callback_url	=	$_SERVER['HTTP_REFERER'];
	
	
	
	if(isset($_COOKIE['product']))
		{			
			foreach($_COOKIE['product'] as $name => $value)
				{
					if($_COOKIE['product'][$name]['id'] == $_GET['id'])
						{
							setcookie("product[".$name."][amount]", $_COOKIE['product'][$name]['amount'] + $_GET['amount']);
						}
					else
						{
							setcookie("product[". intval($name + 1) ."][id]", $_GET['id']);
							setcookie("product[". intval($name + 1) ."][amount]", $_GET['amount']);
						}
				}
		}
	else
		{
			setcookie("product[1][id]", $_GET['id']);
			setcookie("product[1][amount]", $_GET['amount']);
		}
	
	echo '<pre>';
	print_r($_COOKIE['product']);
	echo '</pre>';

?>


Maaaaaar: nu gaat het ok, als je bijv: id=1&amount=1 doet dan blijft ie de amount van die ene ID ophogen met 1, alleen als ik dan id=2&amount=1 doe, dan voegt ie 'm 1 keer toe, maar matcht 'm daarna niet meer en verhoogt ie de amount niet meer...
koekje ?

het is $_COOKIE

en dat schrijf je ook nog eens met hoofdletters
Als je niks nuttigs te melden hebt ;-)..
Jacco Engel op 21/11/2010 13:54:39

Je doet te moeilijk denk ik

Als je gewoon $_koekje[product_id][amount] is het een stuk makkelijker




het ging hierom

Reageren