Versio

Winkelwagentje

Overzicht Reageren

Justin S

Justin S

21/11/2010 12:09:37
Quote Anchor link
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?
 
PHP hulp

PHP hulp

25/05/2012 19:41:25
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Karl Karl

Karl Karl

21/11/2010 12:31:46
Quote Anchor link
Ik zou zoiets doen:
$producten = array(1 // product id
=> array('ammout'=>1));
dan kan je gewoon $producten[$productid]['ammount'] +=4; doen o.i.d.
 
Justin S

Justin S

21/11/2010 12:35:21
Quote Anchor link
Maar een cookie pakt geen arrays, alleen strings
 
Tobias Tobias

Tobias Tobias

21/11/2010 13:08:31
Quote Anchor link
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
 
Karl Karl

Karl Karl

21/11/2010 13:13:45
Quote Anchor link
Zie voorbeeld drie van set_cookie.
Of serialize doen.
 
Justin S

Justin S

21/11/2010 13:25:33
Quote Anchor link
Ik heb ondertussen dit:

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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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.
Gewijzigd op 21/11/2010 13:31:23 door Justin S
 
Jacco Engel

Jacco Engel

21/11/2010 13:54:39
Quote Anchor link
Je doet te moeilijk denk ik

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

Justin S

21/11/2010 13:57:06
Quote Anchor link
Het was inderdaad te moeilijk inmiddels al een andere opzet:

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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?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...
 
Jordi kroon
Redacteur

jordi kroon

21/11/2010 13:58:34
Quote Anchor link
koekje ?

het is $_COOKIE

en dat schrijf je ook nog eens met hoofdletters
 
Justin S

Justin S

21/11/2010 13:59:10
Quote Anchor link
Als je niks nuttigs te melden hebt ;-)..
 
Jordi kroon
Redacteur

jordi kroon

21/11/2010 14:00:11
Quote Anchor link
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
 
Justin S

Justin S

21/11/2010 14:02:54
Quote Anchor link
Jordi kroon op 21/11/2010 14:00:11:
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


No shit sherlock, maar dat koekje COOKIE moet zijn snap ik zelf ook ;-).. Fijn dat je ook wakker bent!
 
Karl Karl

Karl Karl

21/11/2010 14:03:14
Quote Anchor link
Jordi kroon op 21/11/2010 14:00:11:
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

Dat is het voorbeeld. Cookies worden ook wel eens koekjes genoemd om er naar te verwijzen.

De opzet die Jacco geeft bedoelde ik ook.
 
Justin S

Justin S

21/11/2010 14:09:20
Quote Anchor link
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.

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
16
17
18
19
20
21
22
23
<?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>';

?>
 
Jacco Engel

Jacco Engel

21/11/2010 14:14:11
Quote Anchor link
Waarom zou je het vorige aantal willen?
 
Justin S

Justin S

21/11/2010 14:16:25
Quote Anchor link
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:
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
16
17
18
19
20
21
<?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>';

?>
Gewijzigd op 21/11/2010 14:24:50 door Justin S
 
Jacco Engel

Jacco Engel

21/11/2010 14:40:02
Quote Anchor link
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'];
 
Justin S

Justin S

21/11/2010 15:22:13
Quote Anchor link
Oké, dit is heel raar.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?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.
 
Karl Karl

Karl Karl

21/11/2010 15:26:32
Quote Anchor link
Geen probleem hier.
 
Justin S

Justin S

21/11/2010 15:30:39
Quote Anchor link
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!


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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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>';

?>
Gewijzigd op 21/11/2010 16:51:22 door Justin S
 
Justin S

Justin S

24/11/2010 12:29:29
Quote Anchor link
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...
Gewijzigd op 24/11/2010 12:38:38 door Justin S
 



Overzicht Reageren