Webshop _SESSION
Ik was een paar maanden tussendoor gestopt met programmeren, helaas.
Nu ben ik weer begonnen en ben bezig met een webshopje om alles weer even boven te halen.
Ik heb hier bewust gekozen om geen array te maken van een session maar alles in 1 session op te slaan. En doormiddel van explode dan weer uit elkaar te halen. Nu had ik de volgende functie geschreven om te controleren of een artikel al in het winkel mandje zit of niet. Zoja dan moet er een prullenbak weergeven worden om hem er weer zo snel mogelijk uit te halen en zo niet dan moet er een toevoeg knopje getoond worden. Dit werkt echter goed zolang je maar 1 item in je winkel mandje hebt zitten.
Controleren of hij in het lijstje staat:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
foreach($items as $item){
if ($item == $id) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
} else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
}
//var_dump($items);
}
?>
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
foreach($items as $item){
if ($item == $id) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
} else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
}
//var_dump($items);
}
?>
Toevoegen aan het lijstje:
Code (php)
Zie : http://vandesteeg.org/index.php voor een live voorbeeld.
Speel een beetje met het toevoegen van items aan het winkel mandje dan zie je denk ik wel wat ik bedoel.
Gewijzigd op 04/01/2013 14:53:36 door Bas van de Steeg
Ik zou niet weten wat je probleem is....ik kan allebei de items toevoegen en ook weer verwijderen :S
Als je een item toevoegt dat dat plaatje dan moet veranderen in een prullenbak.
Als je dan nog een item toevoegt dan moet ook dit plaatje weer veranderen in een prullenbak.
En dit is echter niet het geval.
Toevoeging op 04/01/2013 15:19:13:
Heb even een voorbeeldje gemaakt:
http://vandesteeg.org/voorbeeld.png
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
foreach($items as $item){
echo $item . "=" . $id;
if ($item == $id) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
} else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
}
//var_dump($items);
}
?>
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
foreach($items as $item){
echo $item . "=" . $id;
if ($item == $id) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
} else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
}
//var_dump($items);
}
?>
Dit is een eerste stap om te controleren waar het probleem zit...
Gewijzigd op 04/01/2013 15:20:14 door Lars Anderson
Bij het 1e item klopt het want het ID daarvan is 2 en het SessionCart ID ook maar bij de 2de klopt het niet wat ik niet snap.
das raar...is me net niet opgevallen..en ik zou durven zweren dat ik ze allebei een prullenbakje heb zien tonen...en allebei daar weggeklikt :S...
Met je foreach() loop je als het ware door het lijstje $items heen. Het eerste $item dat je tegenkomt is het eerstgekozen product in je mandje. Vervolgens zeg je "return" en dus controleert ie dus steeds alleen de eerste waarde in de array en dan ga je terug met het resultaat van die vergelijking. Dit is uiteraard alleen bij het eerstgekozen product een match.
Om dit te voorkomen kun je gebruik maken van de PHP functie in_array (http://php.net/manual/en/function.in-array.php)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
if ($id, in_array($items)) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
}
else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
//var_dump($items);
}
?>
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
if ($id, in_array($items)) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
}
else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
//var_dump($items);
}
?>
Toevoeging op 04/01/2013 15:36:17:
Ah , Lars ik zie het nu je het zegt ook ja.
Dom foutje, maar de functie die ik gebruikte licht zo voor de hand :) Omdat ik hem ook al gebruikte voor mijn WinkelMandje tonen, maar daar hoef ik niks te controleren. Bedankt ;)
Toevoeging op 04/01/2013 15:39:32:
Hij werkt nu inderdaad mooi ;)
Alleen had je de in_array verkeerd gedaan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
if (in_array($id, $items)) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
}
else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
//var_dump($items);
}
?>
function checkItem($id) {
$items = explode(',',$_SESSION['cart']);
if (in_array($id, $items)) {
return '<a href="shop/remove/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/trash.png"></a>';
}
else {
return '<a href="shop/add/'.$id.'/" rel="nofollow"><img height="16" width="16" src="images/addShopCart.png"></a>';
}
//var_dump($items);
}
?>
Succes verder met t ontwikkelen...