Producten toevoegen aan cookie/updaten van een cookie
Code (php)
Hoe zorg ik er voor dat de cookie niet wordt overschreven maar wordt geupdate? Heb namelijk nog nooit echt goed met cookies gewerkt.
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 -
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
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 -
Code (php)
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
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);
}
?>
/*
* 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
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.
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 :)
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.