Producten uit een winkelwagentje in database zetten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis Wolfe

Dennis Wolfe

10/02/2012 10:00:28
Quote Anchor link
Ik ben een webwinkel aan het bouwen, en ik gebruik een winkelwagensysteem met sessions. Maar het lukt mij niet om na het afrekenen de inhoud van het wagentje in de database te zetten.

Hier is de code van mijn afrekeningpagina:
Quote:
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
<?php
// Include MySQL class
require_once('inc/mysql.class.php');
require_once('inc/global.inc.php');
require_once('inc/functions.inc.php');
session_start();

$ordernr = uniqid(about);

$cart = explode("|",$_SESSION['cart']);

foreach($cart as $items) {

  $item = explode(",",$products);
  
  $iSql = "INSERT INTO bestellingregels
          (bestellingnummer, productnummer, aantal, prijs_per_stuk)
          VALUES
          ("
.$ordernr.", ".$id.", ".$qty.", ".$prijs.")";
  $iQuery = mysql_query($iSql) or die("De query2 op de database is mislukt!");
}



echo "<p>De bestelling is toegevoegd!</p>"
?>



en hier is de code can mijn functions-pagina, de pagina waar het wagentje gemakkt wordt:
Quote:
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
<?php
function writeShoppingCart() {
    $cart = $_SESSION['cart'];
    if (!$cart) {
        return '<p>Uw winkelwagen is leeg</p>';
    }
else {
        // Parse the cart session variable
        $items = explode(',',$cart);
        $en = (count($items) > 1) ? 'en':'';
        return '<p>U heeft <a href="cart.php">'.count($items).' product'.$en.' in uw winkelwagen</a></p>';
    }
}

function
showCart() {
    global $db;
    $cart = $_SESSION['cart'];
    if ($cart) {
        $items = explode(',',$cart);
        $contents = array();
        foreach ($items as $item) {
            $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
        }

        $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
        $output[] = '<table>';
        foreach ($contents as $id=>$qty) {
            $sql = 'SELECT * FROM producten WHERE productnummer = '.$id;
            $result = $db->query($sql);
            $row = $result->fetch();
            extract($row);
            $output[] = '<tr>';
            $output[] = '<td><a href="cart.php?action=delete&productnummer='.$id.'" class="r">Verwijder</a></td>';
            $output[] = '<td>'.$productnaam.' van '.$merk.'</td>';
            $output[] = '<td>&euro;'.$prijs.'</td>';
            $output[] = '<td><input type="text" name="aantal'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
            $output[] = '<td>&euro;'.($prijs * $qty).'</td>';
            $total += $prijs * $qty;
            $output[] = '</tr>';
        }

        $output[] = '</table>';
        $output[] = '<p>Totaal: <strong>&euro;'.$total.'</strong></p>';
        $output[] = '<div><button type="submit">Verander aantallen</button></div>';
        $output[] = '</form>';
    }
else {
        $output[] = '<p>Uw winkelwagen is leeg</p>';
    }

    return join('',$output);
}

?>


Het winkelwagentje zelf werkt gewoon ged. Alleen het afrekenen gaat mis.
Kunnen jullie mij helpen en aanwijzen waar de fout zit of wat ik moet doen om dit op te lossen? Sorry voor de grote lappen tekst en alvast bedankt.
Gewijzigd op 10/02/2012 10:03:39 door Dennis Wolfe
 
PHP hulp

PHP hulp

23/12/2024 04:34:35
 
- SanThe -

- SanThe -

10/02/2012 10:11:00
Quote Anchor link
Begin eens met dit bovenin je script te zetten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest

?>
 
Erwin H

Erwin H

10/02/2012 10:12:20
Quote Anchor link
Wat is dit:
$ordernr = uniqid(about);
 
Dennis Wolfe

Dennis Wolfe

15/02/2012 11:38:34
Quote Anchor link
Ik heb die error-message code boven het script gezet en het geeft de volgende errors:
Quote:
Deprecated: Assigning the return value of new by reference is deprecated in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\inc\global.inc.php on line 6

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\inc\global.inc.php:6) in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 11

Notice: Use of undefined constant about - assumed 'about' in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 13

Notice: Undefined variable: products in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 23

Notice: Undefined variable: id in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 28

Notice: Undefined variable: qty in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 28

Notice: Undefined variable: prijs in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 28
De query2 op de database is mislukt!


Dit is mijn global script, dat is om te verbinden met dfe database. Elke pagina heeft een verwijzing hiernaar:
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$host
= 'localhost';
$user = 'root';
$pass = 'phpsql';
$name = 'webwinkel';
$db = &new MySQL($host,$user,$pass,$name);
?>


Ik weet niet wat dat deceprecated betekent, als ik dat new weghaal werkt mijn site niet meer.
Dit is het volledige checkout script. Bij het script in de eerste post had ik het klantenstuk eruit ngelaten omdat het me niet relevant leek:
Quote:
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
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest

// Include MySQL class

require_once('inc/mysql.class.php');
require_once('inc/global.inc.php');
require_once('inc/functions.inc.php');
session_start();

$ordernr = uniqid(about);
 
$bsql = ("INSERT INTO klanten (voornaam, achternaam, plaats, postcode, straatnaam, huisnummer, bankrekeningnummer, bestellingnummer)
values ('.$_POST[voornaam].','.$_POST[achternaam].','.$_POST[plaats].','.$_POST[postcode].','.$_POST[straatnaam].','.$_POST[huisnummer].','.$_POST[bankrekeningnummer].','.$ordernr.');"
);
$query = mysql_query($bsql) or die("De query1 op de database is mislukt!");

$cart = explode("|",$_SESSION['cart']);

foreach($cart as $items) {

  $item = explode(",",$products);
  
  $iSql = "INSERT INTO bestellingregels
          (bestellingnummer, productnummer, aantal, prijs_per_stuk)
          VALUES
          ("
.$ordernr.", ".$id.", ".$qty.", ".$prijs.")";
  $iQuery = mysql_query($iSql) or die("De query2 op de database is mislukt!");
}


echo "<p>Uw bestelling is geplaatst!</p>"

?>


Die orderid query is om een uniek bestellingsnummer te genereren dat ik kan gebruiken om men klanten- en bestellingregeltabel te linken.

Sorry dat ik niet eerder kon reagerenm, maar ik kon niet bij de computer waar de scripts op staan.
Gewijzigd op 15/02/2012 11:40:50 door Dennis Wolfe
 
Erwin H

Erwin H

15/02/2012 11:41:59
Quote Anchor link
deprecated betekent dat het niet meer gebruikt kan worden. Maar het gaat niet over new, maar over het gebruik van de & ervoor, dat kan niet meer. new kan je dus laten staan, maar dat & teken moet je weghalen.
 
Dennis Wolfe

Dennis Wolfe

15/02/2012 11:59:39
Quote Anchor link
Ik heb die & weggehaald en nu zijn er iets andere errors. Vreemd genoeg ook een fout met die orderid unieke waarde. Ik dacht dat dat werkte, aangezien hij wel de klanteninformatie met een gegenereerd uniek nummer in de database zet. Ik heb de about weggehaald en de error is nu weg
Quote:

Notice: Undefined variable: products in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 23

Notice: Undefined variable: id in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 28

Notice: Undefined variable: qty in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 28

Notice: Undefined variable: prijs in U:\xampp\htdocs\webwinkel\cart-demo\cart-demo\checkout.php on line 28
De query2 op de database is mislukt!
Gewijzigd op 15/02/2012 12:03:50 door Dennis Wolfe
 
Erwin H

Erwin H

15/02/2012 12:02:47
Quote Anchor link
Dat about daar vroeg ik al eerder naar. Wat is dat, niet wat doet het? Is het een variabele? Dan moet het zijn $about. Is het een constante? Dan moet het eerder gedefinieerd zijn. Is het een functie? Dan moeten er () achter staan.
 
Dennis Wolfe

Dennis Wolfe

15/02/2012 12:05:34
Quote Anchor link
Ik heb die about nu weggehaald, nu is het gewoon $ordernr = uniqid(); en nu is die error weg. Die about was duidelijk onnodig. Nu is het enige probleem dat hij niet die spullen uit de wagen wil halen.

En Bedankt dat je me zo snel wilt helpen!
 
Erwin H

Erwin H

15/02/2012 12:31:32
Quote Anchor link
Er missen nogal wat quotes in je insert statement:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$bsql
= ("INSERT INTO klanten (voornaam, achternaam, plaats, postcode, straatnaam, huisnummer, bankrekeningnummer, bestellingnummer)
values ('.$_POST[voornaam].','.$_POST[achternaam].','.$_POST[plaats].','.$_POST[postcode].','.$_POST[straatnaam].','.$_POST[huisnummer].','.$_POST[bankrekeningnummer].','.$ordernr.');"
);
?>

Zou moeten zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$bsql
= ("INSERT INTO klanten (voornaam, achternaam, plaats, postcode, straatnaam, huisnummer, bankrekeningnummer, bestellingnummer)
values ('"
.$_POST['voornaam']."','".$_POST['achternaam']."','".$_POST['plaats']."','".$_POST['postcode']."','".$_POST['straatnaam']."','".$_POST['huisnummer']."','".$_POST['bankrekeningnummer']."','".$ordernr."')");
?>


Toevoeging op 15/02/2012 12:32:37:

En dan bij de volgende heb je allerlei ongedefinieerde variabelen, dus gaan die queries uberhaupt niet werken.
Gewijzigd op 15/02/2012 12:40:54 door Erwin H
 
- SanThe -

- SanThe -

15/02/2012 12:34:46
Quote Anchor link
@Erwin: Doe dan deze ook:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$_POST
[voornaam]
// naar
$_POST['voornaam']
?>


Verder is de query behoorlijk lek. SQL-Injection is mogelijk omdat elke vorm van beveiliging ontbreekt.
 
Erwin H

Erwin H

15/02/2012 12:39:54
Quote Anchor link
:-) helemaal gelijk Santhe, nog meer quotes ontbraken...
 
Dennis Wolfe

Dennis Wolfe

16/02/2012 09:25:52
Quote Anchor link
Ik heb die extra quotes erin gezet, en ik heb uiteindelijk ervoor gezorgd dat hij 1 van de producten in mijn wagentje in de database zet, maar het lukt nog niet om alle producten erin te zetten. Dus als er bijvoorbeeld drie dingen in zitten, moet hij drie regels in de database maken, maar hij maakt er maar één.
Hebben jullie tips hoe je dat doet? Sorry als het een hele domme simpele vraag is.
 
Erwin H

Erwin H

16/02/2012 09:32:20
Quote Anchor link
Dat zit in je foreach loop.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
foreach($cart as $items) {

  $item = explode(",",$products);
  
  $iSql = "INSERT INTO bestellingregels
          (bestellingnummer, productnummer, aantal, prijs_per_stuk)
          VALUES
          ("
.$ordernr.", ".$id.", ".$qty.", ".$prijs.")";
  $iQuery = mysql_query($iSql) or die("De query2 op de database is mislukt!");
}

?>

Zoals je die hier hebt opgebouwd gaat het zeker niet werken, want alle parameters die je gebruikt ($ordernr, $id, etc) krijgen nooit een andere waarde. Sterker nog, ik kan in dit voorbeeld niet eens zien waar ze vandaan komen.
Mocht je al nieuwere code hebben voor dit stuk, dan is het zinvol om dat even te plaatsen.
 
Jacco Engel

Jacco Engel

16/02/2012 09:32:24
Quote Anchor link
Dennis even enigsinds offtopic , maar hopelijk helpt het je toch (op termijn).

Wat staat er precies in $_SESSION['cart'], en wat is je motivatie om alles in 1 string te doen in plaats van in een multi dimentionale array :)? Deze oplossing is namelijk goed te doen om dingen IN je winkelwagen te stoppen, maar wat ga je doen als ik iets wil verwijderen of, nog leuker als ik van product A eerst 3 stuks in mn winkelwagen doe en dat wil veranderen naar 2 :)?

Netter zou , in mijn ogen, zijn een cart session met de volgende sretup :
$_SESSION['cart']['productid'] = $aantal

Dit maakt bovengenoemde argumenten een stuk makkelijker om te maken en is , volgens mij, een iets nettere manier van code kloppen :)
 



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.