Webshop _SESSION

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas  van de Steeg

Bas van de Steeg

04/01/2013 14:53:08
Quote Anchor link
Hallo mensen,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}


?>

Toevoegen aan het lijstje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
switch ($_GET['action']) {
    case
'add':
        if (isset($_SESSION['cart'])) {
            $_SESSION['cart'] .= ','.$_GET['id'];
        }
else {
            $_SESSION['cart'] = $_GET['id'];
        }

        break;
       //  case 'De rest van de actions !':  ;)  break;
}
?>


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
 
PHP hulp

PHP hulp

22/12/2024 20:02:40
 
No One

No One

04/01/2013 15:04:25
Quote Anchor link
Ik zou niet weten wat je probleem is....ik kan allebei de items toevoegen en ook weer verwijderen :S
 
Bas  van de Steeg

Bas van de Steeg

04/01/2013 15:12:15
Quote Anchor link
Het probleem is :
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
 
Lars Anderson

Lars Anderson

04/01/2013 15:19:33
Quote Anchor link
wat je kunt doen om te achterhalen of $item en $id wel echt gelijk zijn in beide gevallen is tijdelijk een echo van beide vars geven binnen je foreach()

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}
?>

Dit is een eerste stap om te controleren waar het probleem zit...
Gewijzigd op 04/01/2013 15:20:14 door Lars Anderson
 
Bas  van de Steeg

Bas van de Steeg

04/01/2013 15:22:40
Quote Anchor link
Lars, zoals je kan zien heb ik op het de site even je echo toegevoegd.

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.
 
No One

No One

04/01/2013 15:31:37
Quote Anchor link
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...
 
Lars Anderson

Lars Anderson

04/01/2013 15:32:41
Quote Anchor link
Ja ik snap het al... dom dat ik dat niet eerder zag.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}
?>
 
Bas  van de Steeg

Bas van de Steeg

04/01/2013 15:33:29
Quote Anchor link
Waarschijnlijk had je dan een item toegevoegd en toen verwijderd en toen pas de ander toegevoegd want dan werkt het wel. Ik snap alleen totaal niet waarom het maar bij 1 item werkt.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}
?>
 
Lars Anderson

Lars Anderson

04/01/2013 15:41:44
Quote Anchor link
owja... das t nadeel van PHP code kloppen zonder highlighting ;-)

Succes verder met t ontwikkelen...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.