Winkelwagen script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Milo

Milo

26/08/2009 15:02:00
Quote Anchor link
Hallo,
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)
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
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');
?>


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

PHP hulp

29/04/2024 00:56:50
 
- SanThe -

- SanThe -

26/08/2009 15:47:00
Quote Anchor link
Op regel 51 verhoog je $i terwijl ik nergens zie dat $i al bestaat.

Zet dit bovenin je script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>
 
Robert Deiman

Robert Deiman

26/08/2009 15:50:00
Quote Anchor link
Wat ik zelf prettiger vind werken (ook gemakkelijker met explode) is het volgende:

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.
 
Milo

Milo

26/08/2009 15:58:00
Quote Anchor link
Beste Robert,

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
 
- SanThe -

- SanThe -

26/08/2009 16:09:00
Quote Anchor link
Kan site niet vinden. Slechte dns bij b-one.
 
Milo

Milo

26/08/2009 16:11:00
Quote Anchor link
Sorry, mag ik vragen wat dat inhoud?
 
- Ariën  -
Beheerder

- Ariën -

26/08/2009 16:18:00
Quote Anchor link
Dat de provider b-one een slechte DNS heeft, en daarom dus SanThe de pagina niet kan bereiken die hij wou tonen.
@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 -
 
- SanThe -

- SanThe -

26/08/2009 16:29:00
Quote Anchor link
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)
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
<?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');
?>
 
Milo

Milo

26/08/2009 16:37:00
Quote Anchor link
Okok, dan ga ik nu proberen omm op winkelwagen.php alles te kunnen weergeven dmv de foreach loop en mysql query

heb dit nu
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
<?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>';
    }
}

?>


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
 
- SanThe -

- SanThe -

26/08/2009 16:50:00
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
<?php
foreach($_SESSION['winkelwagen'] as $id => $id_value)
{

    echo 'Artikel: ' . $id . '<br/>';
    foreach($id_value as $maat => $maat_value)
    {

        foreach($maat_value as $kleur => $aantal)
        {

            echo ' Maat: ' . $maat;
            echo ' Kleur: ' . $kleur;
            echo ' Aantal: ' . $aantal . '<br/>';
        }
    }
}

?>

Uiteraard moet je de werkelijke namen even uit de database halen.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Milo

Milo

26/08/2009 16:55:00
Quote Anchor link
Serieus schut u die codes gewoon uit uw mouw ofzo??

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
 
- SanThe -

- SanThe -

26/08/2009 17:01:00
Quote Anchor link
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 -
 
Milo

Milo

26/08/2009 17:03:00
Quote Anchor link
okok, maar die vars zijn voorderest dus niet nodig??
 
- SanThe -

- SanThe -

26/08/2009 17:07:00
Quote Anchor link
Nee, ze worden alleen in de volgende foreach() weer één voor één uitgelezen. Dat is eigenlijk alles.
 
Milo

Milo

26/08/2009 17:10:00
Quote Anchor link
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
 
- SanThe -

- SanThe -

26/08/2009 17:13:00
Quote Anchor link
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.
 
Milo

Milo

26/08/2009 17:15:00
Quote Anchor link
Okok,
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
 



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.