Producten toevoegen aan cookie/updaten van een cookie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jorn Reed

Jorn Reed

14/02/2018 20:25:30
Quote Anchor link
Ik heb op een product pagina een knop die het desbetreffende product toevoegd aan een cart array. Vervolgens komt die array in een cookie terrecht.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
 $cart
= [];
    $cart[$product['id']] = [];
    $cart[$product['id']]['product_name'] = $product['name'];

    if(isset($_POST['add'])){
        setcookie('cart', serialize($cart), time()+3600);
        $cart = unserialize($_COOKIE['cart']);
        dd($cart);
    }

?>


Hoe zorg ik er voor dat de cookie niet wordt overschreven maar wordt geupdate? Heb namelijk nog nooit echt goed met cookies gewerkt.
 
PHP hulp

PHP hulp

22/04/2019 23:07:55
Honeypot
 
- Ariën -
Beheerder

- Ariën -

14/02/2018 20:33:12
Quote Anchor link
Waarom zou je geen sessies gebruiken? Daar kan je hele array's in plaatsen en werkt stukken makkelijker.

Een bekende pitfall in jouw code. De waarde uit $_COOKIE is pas beschikbaar na een refresh, en niet direct.
Gewijzigd op 14/02/2018 20:35:09 door - Ariën -
 
Jorn Reed

Jorn Reed

14/02/2018 20:35:27
Quote Anchor link
Mensen hadden mij juist aanbevolen om cookies te gebruiken, omdat een sessie wordt afgebroken bij het sluiten van de browser en een cookie niet.

Achteraf is het de bedoeling dat hij het naar de shopping-cart.php stuurt dus daar komt het uiteindelijk te staan.
Gewijzigd op 14/02/2018 20:39:33 door Jorn Reed
 
- Ariën -
Beheerder

- Ariën -

14/02/2018 20:40:39
Quote Anchor link
Dan kan je net zo goed de sessie gewoon laten behouden zodra iemand de browser sluit met session.cookie_lifetime.

Als je zonodig met Cookies wilt werken kan je ook een unieke hash opslaan, en de cart opslaan in de database. Dan kan je de boel een eenvoudig overhevelen naar een account.
Gewijzigd op 14/02/2018 20:43:24 door - Ariën -
 
Joakim Broden

Joakim Broden

14/02/2018 21:44:43
Quote Anchor link
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
43
44
<?php
    
    /*
     * Cart cookie nu altijd te benaderen via de $_COOKIE var.
     */

    if (isset($_COOKIE['cart'])) {
        $_COOKIE['cart'] = unserialize($_COOKIE['cart']);
    }
else {
        $_COOKIE['cart'] = [];
    }


    /*
     * Product toevoegen, opslaan in cookie.
     */

    if (isset($_POST['add'])) {
        $_COOKIE['cart']['ID VAN PRODUCT'] = [
            'id'        => 'ID VAN PRODUCT',
            'amount'    => 'AANTAL PRODUCTEN'
        ];

        setcookie('cart', serialize($_COOKIE['cart']), time() + 3600);
    }


    /*
     * Product verwijderen, opslaan in cookie.
     */

    if (isset($_POST['remove'])) {
        if (isset($_COOKIE['cart']['ID VAN PRODUCT'])) {
            unset($_COOKIE['cart']['ID VAN PRODUCT']);
        }


        setcookie('cart', serialize($_COOKIE['cart']), time() + 3600);
    }


    /*
     * Alle producten verwijderen, opslaan in cookie.
     */

    if (isset($_POST['remove-all'])) {
        $_COOKIE['cart']  = [];

        setcookie('cart', serialize($_COOKIE['cart']), time() + 3600);
    }


?>


Maar zoals Arien al zei zou ik een gebruiken van een DB.
Gewijzigd op 14/02/2018 21:48:16 door Joakim Broden
 
Obelix Idefix

Obelix Idefix

14/02/2018 22:39:27
Quote Anchor link
Jorn Reed op 14/02/2018 20:35:27:
Mensen hadden mij juist aanbevolen om cookies te gebruiken, omdat een sessie wordt afgebroken bij het sluiten van de browser en een cookie niet.

Ik heb mijn browser zo ingesteld dat bij afsluiten alle cookies, geschiedenis, etc. wordt verwijderd. Cookie of sessie zijn dus beide niet meer beschikbaar na afsluiten browser.

Vraag is wat je wilt bewaren en hoe. Op pc gebruiker lijkt me niet de plek.
 
Jorn Reed

Jorn Reed

15/02/2018 02:38:41
Quote Anchor link
Is het bijwerken van een super global eigenlijk handig, ik zie het niet vaak gebeuren, meestal zie ik dat er een array in de setcookie() functie wordt gegooid, en mocht de array geleegd worden, zal dat bij de array gebeuren en niet bij de super global $_COOKIE. Ik kan het mis hebben hoor, maar daarom vraag ik het ook :)
 
Thomas van den Heuvel

Thomas van den Heuvel

15/02/2018 15:29:39
Quote Anchor link
Jorn Reed op 15/02/2018 02:38:41:
Is het bijwerken van een super global eigenlijk handig, ik zie het niet vaak gebeuren.

Dan heb je nog niet veel gezien. Superglobals vormen onder andere een abstractiemechanisme. Een die overal toegankelijk is in code en scopes overstijgt. Per superglobal verschilt het ook wat je precies aan het doen bent, zo manipuleer je met $_COOKIE['cart'] (indirect) het cart-cookie. De superglobal is slechts het medium via welke je andere dingen manipuleert.
 



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.