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?
Jordi kroon op 21/11/2010 14:00:11

[quote="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
[/quote]

No shit sherlock, maar dat koekje COOKIE moet zijn snap ik zelf ook ;-).. Fijn dat je ook wakker bent!
Jordi kroon op 21/11/2010 14:00:11

[quote="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
[/quote]
Dat is het voorbeeld. Cookies worden ook wel eens koekjes genoemd om er naar te verwijzen.

De opzet die Jacco geeft bedoelde ik ook.

Oké, ik was nog half slapend. Snap nu wat jullie bedoelen.
Maar hoe haal ik dan het vorige aantal op? Die kan ik niet matchen met foreach want dan krijg ik beide values terug.


<?php
	
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
	
	//$callback_url	=	$_SERVER['HTTP_REFERER'];
	
	
	
	if(isset($_COOKIE['product'][$_GET['id']]))
		{			
			// Hoe krijg ik hier dan de match?
		}
	else
		{
			setcookie("product[".$_GET['id']."][".$_GET['amount']."]");
		}
	
	echo '<pre>';
	print_r($_COOKIE['product']);
	echo '</pre>';

?>
Waarom zou je het vorige aantal willen?
Scherpe opmerking, ik zie nu in dat ik dat veel beter door kan geven met de $_GET in plaats van in het script te gaan rekenen.

EDIT: Hoe overschrijf ik dan een cookie als ik de amount niet weet maar alleen de ID? Ik weet natuurlijk het vorige amount niet, dus kan alleen matchen op id

Dit werkt niet:

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

?>
Wat dacht je van de amount IN de cookie zetten ipv als key ;)?

setcookie("product[".$_GET['id']."]" , $_GET['amount']);

optellen $_COOKIE['product'][$_GET['id']] += $_GET['amount'];
aftrekken $_COOKIE['product'][$_GET['id']] -= $_GET['amount'];
Oké, dit is heel raar.


<?php
	
	if(isset($_COOKIE['product'][$_GET['id']]))
		{			
			$_COOKIE['product'][$_GET['id']] = $_GET['amount'];
		}
	else
		{
			setcookie("product[".$_GET['id']."]" , $_GET['amount']);
		}

?>


Als ik nu dus bijvoorbeeld id set naar 2 en de amount naar 9, en ik set vervolgens id=1 en amount=4 verandert 'ie de array naar

[1] => 4
[2] => 1

Online voorbeeld klik hier

Je moet even refreshen om de print_r te krijgen en even spelen met de id en amount.
Geen probleem hier.
EDIT:

Weer een vraag:
Hoe wijzig je de waarde van een cookie? Ik wil dat hij op blijft tellen met 1 als er geen amount wordt meegegeven (dus als iemand voor de tweede keer op "voeg toe aan winkelmandje" klikt moet hij 1 toevoegen. Dit doet hij echter maar één maal.. Nu is de amount bijvoorbeeld 55 maar hij verhoogt niet verder dan 56..

Edit 2:
Gelukt met onderstaande code!



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

?>
Helperts,

Volgende probleem aan de man. Ben bezig met de winkelwagen.
Ik geef elk productveld (die ik uit de cookies haal met foreach) een input veld mee waar je het aantal op kan hogen.
dit gaat prima, het script wordt verwerkt en update elke cookie. Maar zodra de pagina dan refreshed staan daar nog de oude waarden. Zodra ik de pagina opnieuw inlaad update hij de view wel.

Edit: never mind, het is al gelukt...

Reageren