Winkelwagen script
Ik heb het winkelwagen script van een tutorial hier en eigenlijk weer opnieuw geschreven dus alle codes naar mijn eigen wens opgebouwd en voor mij overbodige dingen weg gehaald dingen toegevoegd.
maar nu is er 1 probleem en ik kom er niet uit, namelijk als ik 1 product toevoeg doet hij dat en ik kan zelf het product nog een keer toevoegen zodat aantal goed werkt maar nu het probleem wil ik een geheel ander product toevoegen doet hij niks.
de verwerkings code
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
// Sessies 'aanzetten'
session_start();
// Producten controleren
if(!empty($_POST['id'])) $product_nr = $_POST['id'];
else exit('Geen id');
if(!empty($_POST['aantal'])) $aantal = $_POST['aantal'];
else exit('Geen aantal');
if(!empty($_POST['maat'])) $maat = $_POST['maat'];
else exit('Geen maat');
if(!empty($_POST['kleur'])) $kleur = $_POST['kleur'];
else exit('Geen kleur');
// Controleren of er al inhoud is op de winkelwagen
if(empty($_SESSION['winkelwagen']))
{
// Zoniet, nieuwe aannmaken
$_SESSION['winkelwagen'] = $product_nr.','.$aantal.','.$maat.','.$kleur;
}
else
{
// Winkelwagen opsplitsen
$winkelwagen = explode('|', $_SESSION['winkelwagen']);
// Winkelwagen inhoud tellen
$count = count($winkelwagen);
// Kijken of product al in de winkelwagen zit
$add = FALSE; // Variabelen om te kijken of we later moeten toevoegen
foreach($winkelwagen as $products)
{
/*
Uitleg v.d. explode hieronder
$product[x] -->
x == 0 -> product_nr
x == 1 -> aantal
x == 2 -> maat
x == 3 -> kleur
*/
$product = explode(',',$products);
if($product[0] == $product_nr)
{
// Het product is al in de winkelwagen dus hoeveelheid verhogen met aantal producten dat je wilt
$product[1] = $product[1] + $aantal;
$add = FALSE; // Dus niet toevoegen
}
// En weer in de sessie zetten
$i++;
if($i == 1)
{
$_SESSION['winkelwagen'] = $product[0].','.$product[1].','.$product[2].','.$product[3];
}
else
{
$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product[0].','.$product[1].','.$product[2].','.$product[3];
}
}
// Als we dus wel moeten toevoegen
if($add)
{
$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product[0].','.$product[1].','.$product[2].','.$product[3];
}
}
// Doorsturen naar winkelwagen
header('Location: winkelwagen.php');
?>
// Sessies 'aanzetten'
session_start();
// Producten controleren
if(!empty($_POST['id'])) $product_nr = $_POST['id'];
else exit('Geen id');
if(!empty($_POST['aantal'])) $aantal = $_POST['aantal'];
else exit('Geen aantal');
if(!empty($_POST['maat'])) $maat = $_POST['maat'];
else exit('Geen maat');
if(!empty($_POST['kleur'])) $kleur = $_POST['kleur'];
else exit('Geen kleur');
// Controleren of er al inhoud is op de winkelwagen
if(empty($_SESSION['winkelwagen']))
{
// Zoniet, nieuwe aannmaken
$_SESSION['winkelwagen'] = $product_nr.','.$aantal.','.$maat.','.$kleur;
}
else
{
// Winkelwagen opsplitsen
$winkelwagen = explode('|', $_SESSION['winkelwagen']);
// Winkelwagen inhoud tellen
$count = count($winkelwagen);
// Kijken of product al in de winkelwagen zit
$add = FALSE; // Variabelen om te kijken of we later moeten toevoegen
foreach($winkelwagen as $products)
{
/*
Uitleg v.d. explode hieronder
$product[x] -->
x == 0 -> product_nr
x == 1 -> aantal
x == 2 -> maat
x == 3 -> kleur
*/
$product = explode(',',$products);
if($product[0] == $product_nr)
{
// Het product is al in de winkelwagen dus hoeveelheid verhogen met aantal producten dat je wilt
$product[1] = $product[1] + $aantal;
$add = FALSE; // Dus niet toevoegen
}
// En weer in de sessie zetten
$i++;
if($i == 1)
{
$_SESSION['winkelwagen'] = $product[0].','.$product[1].','.$product[2].','.$product[3];
}
else
{
$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product[0].','.$product[1].','.$product[2].','.$product[3];
}
}
// Als we dus wel moeten toevoegen
if($add)
{
$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product[0].','.$product[1].','.$product[2].','.$product[3];
}
}
// Doorsturen naar winkelwagen
header('Location: winkelwagen.php');
?>
Kan iemand zien of ik in de gehele code iets fout heb gedaan? waardoor dit probleem kan onstaan?
U kunt het hier zelf ervaren: http://after-party.nl/Winkelwagen/
Gr, Milo
Zet dit bovenin je script.
Je maakt een sessie variabele shoppingcart, welke ook weer een array bevat:
$_SESSION['shoppingcart']['artikel_id']['maat'] = 'aantal';
Op deze manier kan je snel bekijken of een artikel al in de shoppingcart voorkomt. Daarbij is het tellen heel gemakkelijk, hoef je geen explode te gebruiken en kan je ook snel controleren (in_array() ) of een artikel al in de lijst staat.
Het is dan vrij simpel om items toe te voegen, aantallen te veranderen of zelfs om items uit je sessie te verwijderen.
Code wordt op die manier een stuk overzichtelijker en werkbaarder. Je hebt in bovenstaande "session voorbeeld" ook meteen de maat er staan van het bestelde artikel.
Zou u dit nader kunnen verklaren zo begrijp ik hem niet echt.
En nu voegt hij wel toe maar steeds hetzelfde id tenzij er een fout in de foreach loop zit bij winkelwagen.php
@ SanThe, u had gelijk over de $i maar nu is dit iets wat ik gewoon heb overgenomen en bij het orginele script is dit ook zo nu neem ik aan dat het wel moet blijven maar moet het verplaatst worden of moet ik ergens bovenaan $i waarde 0 geven?
PS: Licht het aan mij maar is er sinds kort spellings controle?
Gewijzigd op 01/01/1970 01:00:00 door Milo
Kan site niet vinden. Slechte dns bij b-one.
Sorry, mag ik vragen wat dat inhoud?
@SanThe, welke URL bedoelde je?
Verder interessant topic:
http://www.phphulp.nl/forum/showtopic.php?cat=1&id=57690&lasttopic=1
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
Aar schreef op 26.08.2009 16:18:
@SanThe, welke URL bedoelde je?
Bovenstaande: http://after-party.nl/Winkelwagen/
Verder een stukje uitwerking zoals Robert bedoelt. (Getest en werkt)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// Sessies 'aanzetten' en 'checken en eventueel aanmaken'
session_start();
$_SESSION['winkelwagen'] = (isset($_SESSION['winkelwagen'])) ? $_SESSION['winkelwagen'] : array();
// Producten controleren
if(empty($_POST['id']) or empty($_POST['aantal']) or empty($_POST['maat']) or empty($_POST['kleur']))
{
exit('Onvoldoende gegevens. Vul alle velden in');
}
// Controleren of er al inhoud is op de winkelwagen
if(isset($_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']]))
{
$_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']] += $_POST['aantal'];
}
else // Zoniet, nieuwe aannmaken
{
$_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']] = $_POST['aantal'];
}
// Doorsturen naar winkelwagen
header('Location: winkelwagen.php');
?>
// Sessies 'aanzetten' en 'checken en eventueel aanmaken'
session_start();
$_SESSION['winkelwagen'] = (isset($_SESSION['winkelwagen'])) ? $_SESSION['winkelwagen'] : array();
// Producten controleren
if(empty($_POST['id']) or empty($_POST['aantal']) or empty($_POST['maat']) or empty($_POST['kleur']))
{
exit('Onvoldoende gegevens. Vul alle velden in');
}
// Controleren of er al inhoud is op de winkelwagen
if(isset($_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']]))
{
$_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']] += $_POST['aantal'];
}
else // Zoniet, nieuwe aannmaken
{
$_SESSION['winkelwagen'][$_POST['id']][$_POST['maat']][$_POST['kleur']] = $_POST['aantal'];
}
// Doorsturen naar winkelwagen
header('Location: winkelwagen.php');
?>
heb dit nu
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
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
<?php
// Sessie starten
session_start();
error_reporting(E_ALL);
ini_set("display_errors", 1);
// Database connectie maken
include('config.php');
if(empty($_SESSION['winkelwagen']))
{
echo 'Uw winkelwagen is leeg.';
}
else
{
$winkelwagen = $_SESSION['winkelwagen'];
foreach($winkelwagen as $products)
{
$query = mysql_query("SELECT * FROM artikelen WHERE id = '".$_SESSION['winkelwagen'][$_POST['id']]."'");
$record = mysql_fetch_array($query);
echo $record['omschrijving'];
echo '<br>';
echo $_POST['aantal'];
echo '<br>';
echo '<hr>';
echo '<br>';
}
}
?>
// Sessie starten
session_start();
error_reporting(E_ALL);
ini_set("display_errors", 1);
// Database connectie maken
include('config.php');
if(empty($_SESSION['winkelwagen']))
{
echo 'Uw winkelwagen is leeg.';
}
else
{
$winkelwagen = $_SESSION['winkelwagen'];
foreach($winkelwagen as $products)
{
$query = mysql_query("SELECT * FROM artikelen WHERE id = '".$_SESSION['winkelwagen'][$_POST['id']]."'");
$record = mysql_fetch_array($query);
echo $record['omschrijving'];
echo '<br>';
echo $_POST['aantal'];
echo '<br>';
echo '<hr>';
echo '<br>';
}
}
?>
Ga nu testen
EDIT
Ik weet wat ik fout doe maar niet hoe ik het moet oplossen.
Want ik krijg 2 parse errors op regel 21, 25.
Ik moet
$_POST['aantal'];
en
$_SESSION['winkelwagen'][$_POST['id']];
anders weergeven maar ik zou neit weten hoe.
ik moet naar mijn idee iets doen als $_SESSION['winkelwagen'][$_POST['id']]
anders kan je hem toch neit te pakken krijgen, je stop hem namelijk onder die naam er in...
Gewijzigd op 01/01/1970 01:00:00 door Milo
Code (php)
Uiteraard moet je de werkelijke namen even uit de database halen.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Ik ga nu die hele code bekijken om te zien wat het doet en wat het inhoud
Hartstikke bedankt !!
PS nog 1 ding waar zijn de waarden _value voor?
Gewijzigd op 01/01/1970 01:00:00 door Milo
Milo schreef op 26.08.2009 16:55:
Serieus schut u die codes gewoon uit uw mouw ofzo??
Uh, ja. Ik heb nog nooit een shop gemaakt maar ik ben al een tijdje bezig met programmeren.
Milo schreef op 26.08.2009 16:55:
PS nog 1 ding waar zijn de waarden _value voor?
Dat zijn gewoon de hulpvars voor de foreach() loops. Ik probeer er een beetje logische naam aan te geven.
Edit: Het zijn array()'s dus $maat_array is misschien een ietsje betere naam.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
okok, maar die vars zijn voorderest dus niet nodig??
Nee, ze worden alleen in de volgende foreach() weer één voor één uitgelezen. Dat is eigenlijk alles.
okok, zou ik dit script bij de script libary zetten, heb namelijk gezien dat er redelijk veel vraag naar is.. uiteraart met uw naam erbij
Haha, zo bijzonder vind ik het nou ook weer niet. Het is gewoon een kwestie van een beetje logisch indelen. Ik ben alleen even verder gegaan op de voorzet ban Robert.
was maar voorstel omdat ik wel wat topics had gelezen hier en er stonden er redelijk wat...
en huidige script dat er staat is inmiddels wat verouderd