Geen items updaten winkelwagen
Ik ben voor een vriend een website aan het bouwen (voor een broodjesbar waarbij men items in een winkelwagentje kan voegen en deze achteraf doormailen).
Alles werkt perfect behalve dat ik nu vastzit met 1 ergelijk probleem.
Het script update produkten in de winkelwagen aan de hand van hun item_id (denk ik) en verhoogt gewoon de prijs en het aantal.
Ik zou het graag zo zien gebeuren dat elk item dat besteld wordt, ook al bestaat het al in het mandje, dat deze weergegeven wordt op een nieuwe regel in de tabel als nieuw produkt.
Volgens mij is het maar een kleine aanpassing, maar ik zit momenteel muurvast, misschien dat hier iemand mij uit de nood kan helpen.
dank op voorhand.
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
class cart
{
var $items;
var $sub_total;
function cart() {
$this->items = array();
$sub_total = 0;
}
function add_item($item_id, $qty, $product, $price_id, $price2_id, $price3_id, $price4_id, $extras, $item_price, $item_price2, $item_price3, $item_price4) {
// Item not in cart
if(!isset($this->items[$item_id]))
{
// Add item to cart
$this->items[$item_id]["qty"] = $qty;
$total_cost = $this->items[$item_id]["total_cost"] = $qty * ($item_price + $item_price2 + $item_price3 + $item_price4);
$this->items[$item_id]["product"] = $product;
$this->items[$item_id]["price_id"] = $price_id;
$this->items[$item_id]["price2_id"] = $price2_id;
$this->items[$item_id]["price3_id"] = $price3_id;
$this->items[$item_id]["price4_id"] = $price4_id;
$this->items[$item_id]["extras"] = $extras;
$this->sub_total += $total_cost;
}
else
{
// Update item
$item_count = $this->items[$item_id]["qty"] += $qty;
$this->items[$item_id]["total_cost"] = $item_count * ($item_price + $item_price2 + $item_price3 + $item_price4);
$new_cost = $qty * ($item_price + $item_price2 + $item_price3 + $item_price4);
// Calculate subtotal
$this->sub_total += $new_cost;
}
}
function modify_qty($item_id, $new_qty, $item_price, $item_price2, $item_price3, $item_price4) {
// Modify quantity
$prev_qty = $this->items[$item_id]["qty"];
$qty_diff = $prev_qty - $new_qty;
$this->items[$item_id]["total_cost"] = $new_qty * ($item_price + $item_price2 + $item_price3 + $item_price4);
$this->items[$item_id]["qty"] = $new_qty;
// Calculate new subtotal
$this->sub_total -= $qty_diff * $item_price;
}
function delete_item($item_id) {
// Delete item from cart
$this->sub_total -= $this->items[$item_id]["total_cost"];
$this->items[$item_id] = array();
}
function num_items() {
// Calculate total number of items
$total_items = 0;
foreach($this->items as $item_id => $item_data)
$total_items += $item_data["qty"];
return $total_items;
}
function clear() {
// Clear out the cart
$this->items = array();
$this->sub_total = 0;
}
function showcart() {
//dumps cart contents to screen
$current_url = $_SERVER['PHP_SELF'];
foreach ($this->items as $thekey => $thevalue)
{
//print qty
print "<tr><td align='left' valign='top'>";
print "<div align=right>" . $this->items[$thekey]["qty"] . "</div>";
//print item number
if (!$this->items[$thekey]["product"])
{
print "</td><td align='left' valign='top'>";
print "<div align=center></div>";
}
//print product name
print "</td><td align='left' valign='top'>";
print "<strong> " .($this->items[$thekey]["product"])."</strong><br />";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price2_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price3_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price4_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["extras"])." ";
//print total cost
print "</td><td align='left' valign='top'>";
print "<div align=right>€" .number_format($this->items[$thekey]["total_cost"], 2, ',', ' '). " </div>";
//print action column
//print "</td><td>";
//print "<form name=form1 method=get action=". $current_url .">";
//print "<input type=submit value=Verwijder name=Submit><input type=hidden name=delete value=1>";
//print "<input name=itemid type=hidden value=" . $thekey . "></form></tr>";
//print "</td><tr>";
}
}
}
class cart
{
var $items;
var $sub_total;
function cart() {
$this->items = array();
$sub_total = 0;
}
function add_item($item_id, $qty, $product, $price_id, $price2_id, $price3_id, $price4_id, $extras, $item_price, $item_price2, $item_price3, $item_price4) {
// Item not in cart
if(!isset($this->items[$item_id]))
{
// Add item to cart
$this->items[$item_id]["qty"] = $qty;
$total_cost = $this->items[$item_id]["total_cost"] = $qty * ($item_price + $item_price2 + $item_price3 + $item_price4);
$this->items[$item_id]["product"] = $product;
$this->items[$item_id]["price_id"] = $price_id;
$this->items[$item_id]["price2_id"] = $price2_id;
$this->items[$item_id]["price3_id"] = $price3_id;
$this->items[$item_id]["price4_id"] = $price4_id;
$this->items[$item_id]["extras"] = $extras;
$this->sub_total += $total_cost;
}
else
{
// Update item
$item_count = $this->items[$item_id]["qty"] += $qty;
$this->items[$item_id]["total_cost"] = $item_count * ($item_price + $item_price2 + $item_price3 + $item_price4);
$new_cost = $qty * ($item_price + $item_price2 + $item_price3 + $item_price4);
// Calculate subtotal
$this->sub_total += $new_cost;
}
}
function modify_qty($item_id, $new_qty, $item_price, $item_price2, $item_price3, $item_price4) {
// Modify quantity
$prev_qty = $this->items[$item_id]["qty"];
$qty_diff = $prev_qty - $new_qty;
$this->items[$item_id]["total_cost"] = $new_qty * ($item_price + $item_price2 + $item_price3 + $item_price4);
$this->items[$item_id]["qty"] = $new_qty;
// Calculate new subtotal
$this->sub_total -= $qty_diff * $item_price;
}
function delete_item($item_id) {
// Delete item from cart
$this->sub_total -= $this->items[$item_id]["total_cost"];
$this->items[$item_id] = array();
}
function num_items() {
// Calculate total number of items
$total_items = 0;
foreach($this->items as $item_id => $item_data)
$total_items += $item_data["qty"];
return $total_items;
}
function clear() {
// Clear out the cart
$this->items = array();
$this->sub_total = 0;
}
function showcart() {
//dumps cart contents to screen
$current_url = $_SERVER['PHP_SELF'];
foreach ($this->items as $thekey => $thevalue)
{
//print qty
print "<tr><td align='left' valign='top'>";
print "<div align=right>" . $this->items[$thekey]["qty"] . "</div>";
//print item number
if (!$this->items[$thekey]["product"])
{
print "</td><td align='left' valign='top'>";
print "<div align=center></div>";
}
//print product name
print "</td><td align='left' valign='top'>";
print "<strong> " .($this->items[$thekey]["product"])."</strong><br />";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price2_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price3_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["price4_id"])." ";
print " " .eregi_replace("[^, ,a-z]", "", $this->items[$thekey]["extras"])." ";
//print total cost
print "</td><td align='left' valign='top'>";
print "<div align=right>€" .number_format($this->items[$thekey]["total_cost"], 2, ',', ' '). " </div>";
//print action column
//print "</td><td>";
//print "<form name=form1 method=get action=". $current_url .">";
//print "<input type=submit value=Verwijder name=Submit><input type=hidden name=delete value=1>";
//print "<input name=itemid type=hidden value=" . $thekey . "></form></tr>";
//print "</td><tr>";
}
}
}
Gewijzigd op 09/01/2006 00:23:00 door Bart vandebeek
if(!isset($this->items[$item_id]))
in deze
if (1)
of if(true) { :-)
De originele regel in het mandje word volledig vervangen door de nieuwe regel, en dit mag niet. Elk nieuwe produkt, ook al bestaat ze al in het mandje moet op een nieuwe regel komen.
De prijs daarentegen wordt wel juist berekend.
Gewijzigd op 09/01/2006 12:19:00 door bart vandebeek
geen while, dus auto laatste
Dank je wel
wat krijg je als itemnr te zien als je iets nieuws toevoegd als er al iets instaat
Het probleem zit hier ook bij dat item_id denk ik:
Alles met een ander item_id komt op een nieuwe regel en werkt perfekt. Als het om hetzelfde item_id gaat dan wordt het originele gewijzigd.
vb.:
Men kan een broodje bestellen met item_id 1 bijvoorbeeld met als opties mayonaise en groenten.
Datzelfde broodje (ook zelfde item_nr) kan men ook bestellen met andere opties.
Het item_id blijft dus hetzelfde, maar het script geeft dit produkt niet als een niewue regel in het mandje, maar overschrijft het andere met hetzelfe item_id.
Dit zou ik anders willen, elke item_id op een nieuwe regel, ook al bestaat ze al in het mandje.
Gewijzigd op 09/01/2006 12:45:00 door bart vandebeek