Producten uit een winkelwagentje in database zetten
Hier is de code van mijn afrekeningpagina:
Quote:
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
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>"
?>
// 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)
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
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>€'.$prijs.'</td>';
$output[] = '<td><input type="text" name="aantal'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
$output[] = '<td>€'.($prijs * $qty).'</td>';
$total += $prijs * $qty;
$output[] = '</tr>';
}
$output[] = '</table>';
$output[] = '<p>Totaal: <strong>€'.$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);
}
?>
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>€'.$prijs.'</td>';
$output[] = '<td><input type="text" name="aantal'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
$output[] = '<td>€'.($prijs * $qty).'</td>';
$total += $prijs * $qty;
$output[] = '</tr>';
}
$output[] = '</table>';
$output[] = '<p>Totaal: <strong>€'.$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
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
$ordernr = uniqid(about);
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!
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)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$host = 'localhost';
$user = 'root';
$pass = 'phpsql';
$name = 'webwinkel';
$db = &new MySQL($host,$user,$pass,$name);
?>
$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)
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
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>"
?>
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
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.
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!
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
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.
En Bedankt dat je me zo snel wilt helpen!
Code (php)
1
2
3
4
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.');");
?>
$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)
1
2
3
4
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."')");
?>
$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
Verder is de query behoorlijk lek. SQL-Injection is mogelijk omdat elke vorm van beveiliging ontbreekt.
:-) helemaal gelijk Santhe, nog meer quotes ontbraken...
Hebben jullie tips hoe je dat doet? Sorry als het een hele domme simpele vraag is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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!");
}
?>
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.
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 :)