Erstellen Sie einen Einkaufswagen mit PHP und MySQL
German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)
Für das Screencast + Tutorial dieser Woche werden wir Ihnen beibringen, wie Sie Ihren eigenen Einkaufswagen mit PHP und MySQL erstellen. Wie Sie feststellen werden, ist es nicht ganz so schwierig, wie Sie vielleicht gedacht haben.
Screencast Vorschau
Schritt 1
Sehen wir uns zunächst die Ordnerstruktur an:

Struktur
- reset.css - Sie können den Reset von diesem Link erhalten
- style.css - unsere eigene CSS-Datei, mit der wir Ihr HTML-Markup formatieren werden
- connection.php - die Datei, die unsere Datenbankverbindung herstellt
- index.php - die Vorlage für unseren Warenkorb
- cart.php - die Datei, wo wir unsere Produkte aus dem Warenkorb ändern können (hinzufügen, entfernen)
- products.php - die Produktliste
Schritt 2
Wir beginnen damit, das HTML-Markup zu schreiben und es dann zu formatieren. So öffnen Sie index.php und kopieren / fügen Sie den folgenden Code ein:
1 |
|
2 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4 |
|
5 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
6 |
<head>
|
7 |
|
8 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
9 |
<link rel="stylesheet" href="css/reset.css" /> |
10 |
<link rel="stylesheet" href="css/style.css" /> |
11 |
|
12 |
<title>Shopping cart</title> |
13 |
|
14 |
</head>
|
15 |
|
16 |
<body>
|
17 |
|
18 |
<div id="container"> |
19 |
|
20 |
<div id="main"> |
21 |
|
22 |
</div><!--end main--> |
23 |
|
24 |
<div id="sidebar"> |
25 |
|
26 |
</div><!--end sidebar--> |
27 |
|
28 |
</div><!--end container--> |
29 |
|
30 |
</body>
|
31 |
</html>
|
Wie Sie sehen können, hat unsere Seite zwei Spalten: die Hauptspalte und die Seitenleiste. Gehen wir zum CSS über. Öffnen Sie die Datei style.css und geben Sie den folgenden Code ein:
1 |
|
2 |
|
3 |
body { |
4 |
font-family: Verdana; |
5 |
font-size: 12px; |
6 |
color: #444; |
7 |
}
|
8 |
|
9 |
|
10 |
#container { |
11 |
width: 700px; |
12 |
margin: 150px auto; |
13 |
background-color: #eee; |
14 |
overflow: hidden; /* Set overflow: hidden to clear the floats on #main and #sidebar */ |
15 |
padding: 15px; |
16 |
}
|
17 |
|
18 |
#main { |
19 |
width: 490px; |
20 |
float: left; |
21 |
}
|
22 |
|
23 |
#sidebar { |
24 |
width: 200px; |
25 |
float: left; |
26 |
}
|
So sollte unsere Produktseite jetzt aussehen:

Voller Screencast
Schritt 3
Bevor wir uns dem PHP / MySQL-Teil zuwenden, müssen wir die Datenbank erstellen. Also öffne phpMyadmin und folge diesen Schritten:
- Wechseln Sie zur Registerkarte Berechtigungen, klicken Sie auf die Schaltfläche zum Hinzufügen eines neuen Benutzers und verwenden Sie die folgenden Einstellungen: Username: tutorial; Host: localhost; Password: supersecretpassword;. Stellen Sie jetzt sicher, dass die globalen Berechtigungen festgelegt sind; Fahren Sie dann mit dem nächsten Schritt fort.
- Erstellen Sie eine neue Datenbank namens Tutorials.
- Erstellen Sie eine neue Tabelle mit dem Namen products, und legen Sie die Anzahl der Felder auf 4 fest. Füllen Sie nun diese Felder so aus, dass Sie Folgendes haben: id_integer - stellen Sie sicher, dass es auf INT gesetzt ist und markieren Sie es als PRIMARY (setzen Sie es auch auf auto_increment); name - mach es VARCHAR mit einer Länge von 100; description - VARCHAR mit einer Länge von 250; price - stellen Sie sicher, dass es auf DECIMAL (2,6) eingestellt ist
- Füllen Sie Ihre Tabelle mit einigen Beispielprodukten auf
Um etwas Zeit zu sparen, habe ich meine Produkttabelle exportiert, sodass Sie einfach die folgende Abfrage ausführen können:
1 |
|
2 |
CREATE TABLE IF NOT EXISTS `products` ( |
3 |
`id_product` int(11) NOT NULL AUTO_INCREMENT, |
4 |
`name` varchar(100) NOT NULL, |
5 |
`description` varchar(250) NOT NULL, |
6 |
`price` decimal(6,2) NOT NULL, |
7 |
PRIMARY KEY (`id_product`) |
8 |
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; |
9 |
|
10 |
INSERT INTO `products` (`id_product`, `name`, `description`, `price`) VALUES |
11 |
(1, 'Product 1', 'Some random description', '15.00'), |
12 |
(2, 'Product 2', 'Some random description', '20.00'), |
13 |
(3, 'Product 3', 'Some random description', '50.00'), |
14 |
(4, 'Product 4', 'Some random description', '55.00'), |
15 |
(5, 'Product 5', 'Some random description', '54.00'), |
16 |
(6, 'Product 6', 'Some random description', '34.00'); |



Schritt 4
Bevor wir zum Extrahieren von Daten aus der Datenbank übergehen, mache ich meine index.php zu einer Vorlage für die Produktliste und den Einkaufswagen. Fügen Sie also den folgenden Code oben auf der Seite index.php hinzu:
1 |
|
2 |
<?php
|
3 |
session_start(); |
4 |
require("includes/connection.php"); |
5 |
if(isset($_GET['page'])){ |
6 |
|
7 |
$pages=array("products", "cart"); |
8 |
|
9 |
if(in_array($_GET['page'], $pages)) { |
10 |
|
11 |
$_page=$_GET['page']; |
12 |
|
13 |
}else{ |
14 |
|
15 |
$_page="products"; |
16 |
|
17 |
}
|
18 |
|
19 |
}else{ |
20 |
|
21 |
$_page="products"; |
22 |
|
23 |
}
|
24 |
?>
|
- session_start() - dies ist für den späteren Gebrauch; Es erlaubt uns, Sitzungen zu benutzen (es ist wichtig, dass der session_start geschrieben wird, bevor irgendwelche anderen Daten an den Browser gesendet werden).
- In der zweiten Zeile schließen wir die connection.php ein, die die Verbindung zur Datenbank herstellt (wir werden uns in einer Sekunde damit beschäftigen). Eine weitere Sache: Der Unterschied zwischen include und require besteht darin, dass die Skriptausführung beendet wird, wenn Sie require verwenden und die Datei nicht gefunden werden kann. Wenn Sie "include" verwenden, wird das Skript weiterhin funktionieren.
- Anstatt den gesamten HTML-Code (den Link zum css, zum js) für jede Datei in Ihrer Site zu kopieren, könnten Sie sie alle relativ zu einer einzigen Datei machen. Zuerst überprüfe ich, ob es eine GET-Variable namens "page set" gibt. Wenn nicht, erstelle ich eine neue Variable namens _pages. Wenn die GET-Variable namens pages zuerst gesetzt wird, möchte ich sicherstellen, dass es sich bei der Datei, die ich einfügen werde, um eine gültige Seite handelt.
Damit dies funktioniert, müssen wir die Datei einschließen. Fügen Sie diese Zeile der index.php zwischen dem div mit der ID "main" hinzu:
1 |
|
2 |
<?php require($_page.".php"); ?> |
Jetzt ist hier die komplette index.php, die wir jetzt haben:
1 |
|
2 |
<?php
|
3 |
session_start(); |
4 |
require("includes/connection.php"); |
5 |
if(isset($_GET['page'])){ |
6 |
|
7 |
$pages=array("products", "cart"); |
8 |
|
9 |
if(in_array($_GET['page'], $pages)) { |
10 |
|
11 |
$_page=$_GET['page']; |
12 |
|
13 |
}else{ |
14 |
|
15 |
$_page="products"; |
16 |
|
17 |
}
|
18 |
|
19 |
}else{ |
20 |
|
21 |
$_page="products"; |
22 |
|
23 |
}
|
24 |
|
25 |
?>
|
26 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
27 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
28 |
<head>
|
29 |
|
30 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
31 |
<link rel="stylesheet" href="css/reset.css" /> |
32 |
<link rel="stylesheet" href="css/style.css" /> |
33 |
|
34 |
|
35 |
<title>Shopping Cart</title> |
36 |
|
37 |
|
38 |
</head>
|
39 |
|
40 |
<body>
|
41 |
|
42 |
<div id="container"> |
43 |
|
44 |
<div id="main"> |
45 |
|
46 |
<?php require($_page.".php"); ?> |
47 |
|
48 |
</div><!--end of main--> |
49 |
|
50 |
<div id="sidebar"> |
51 |
|
52 |
</div><!--end of sidebar--> |
53 |
|
54 |
</div><!--end container--> |
55 |
|
56 |
</body>
|
57 |
</html>
|

Lassen Sie uns die Verbindung zu MySQL herstellen. Öffnen Sie connections.php und geben Sie Folgendes ein:
1 |
|
2 |
<?php
|
3 |
|
4 |
$server="localhost"; |
5 |
$user="tutorial"; |
6 |
$pass="supersecretpassword"; |
7 |
$db="tutorials"; |
8 |
|
9 |
// connect to mysql
|
10 |
|
11 |
mysql_connect($server, $user, $pass) or die("Sorry, can't connect to the mysql."); |
12 |
|
13 |
// select the db
|
14 |
|
15 |
mysql_select_db($db) or die("Sorry, can't select the database."); |
16 |
|
17 |
?>
|
Schritt 5
Jetzt ist es an der Zeit, das Markup für die Produktseite zu schreiben. Also mach weiter und tippe folgendes ein:
1 |
|
2 |
<h1>Product List</h1> |
3 |
<table>
|
4 |
<tr>
|
5 |
<th>Name</th> |
6 |
<th>Description</th> |
7 |
<th>Price</th> |
8 |
<th>Action</th> |
9 |
</tr>
|
10 |
<tr>
|
11 |
<td>Product 1</td> |
12 |
<td>Some random description</td> |
13 |
<td>15 $</th> |
14 |
<td><a href="#">Add to cart</a></td> |
15 |
</tr>
|
16 |
<tr>
|
17 |
<td>Product 2</td> |
18 |
<td>Some random description</td> |
19 |
<td>25 $</th> |
20 |
<td><a href="#">Add to cart</a></td> |
21 |
</tr>
|
22 |
</table>
|
Werfen wir einen Blick auf die Seite:

Wie Sie sehen können, ist es ziemlich hässlich. Lassen Sie uns das nun durch Hinzufügen dieses zusätzlichen CSS gestalten.
1 |
|
2 |
a {color: #48577D; text-decoration: none;} |
3 |
|
4 |
a:hover {text-decoration: underline;} |
5 |
|
6 |
h1, h2 {margin-bottom: 15px} |
7 |
|
8 |
h1 {font-size: 18px;} |
9 |
h2 {font-size: 16px} |
10 |
#main table { |
11 |
width: 480px; |
12 |
}
|
13 |
|
14 |
#main table th { |
15 |
padding: 10px; |
16 |
background-color: #48577D; |
17 |
color: #fff; |
18 |
text-align: left; |
19 |
}
|
20 |
|
21 |
#main table td { |
22 |
padding: 5px; |
23 |
}
|
24 |
#main table tr { |
25 |
background-color: #d3dcf2; |
26 |
}
|
Okay, lass uns jetzt nochmal schauen:

Sieht viel besser aus, meinst du nicht? Im Folgenden finden Sie den vollständigen style.css-Code:
1 |
|
2 |
body { |
3 |
font-family: Verdana; |
4 |
font-size: 12px; |
5 |
color: #444; |
6 |
}
|
7 |
|
8 |
a {color: #48577D; text-decoration: none;} |
9 |
|
10 |
a:hover {text-decoration: underline;} |
11 |
|
12 |
h1, h2 {margin-bottom: 15px} |
13 |
|
14 |
h1 {font-size: 18px;} |
15 |
h2 {font-size: 16px} |
16 |
|
17 |
#container { |
18 |
width: 700px; |
19 |
margin: 150px auto; |
20 |
background-color: #eee; |
21 |
padding:15px; |
22 |
overflow: hidden; |
23 |
}
|
24 |
|
25 |
#main { |
26 |
width: 490px; |
27 |
float: left; |
28 |
}
|
29 |
|
30 |
#main table { |
31 |
width: 480px; |
32 |
}
|
33 |
|
34 |
#main table th { |
35 |
padding: 10px; |
36 |
background-color: #48577D; |
37 |
color: #fff; |
38 |
text-align: left; |
39 |
}
|
40 |
|
41 |
#main table td { |
42 |
padding: 5px; |
43 |
}
|
44 |
|
45 |
#main table tr { |
46 |
background-color: #d3dcf2; |
47 |
}
|
48 |
|
49 |
#sidebar { |
50 |
width: 200px; |
51 |
float: left; |
52 |
}
|
Schritt 6
Bevor wir das Produkt aus der Datenbank extrahieren, entfernen wir die letzten 2 Tabellenzeilen aus unserer Tabelle (wir haben es nur verwendet, um zu sehen, wie unsere Tabelle aussehen wird). Entferne das:
1 |
|
2 |
<tr>
|
3 |
<td>Product 1</td> |
4 |
<td>Some random description</td> |
5 |
<td>15 $</th> |
6 |
<td><a href="#">Add to cart</a></td> |
7 |
</tr>
|
8 |
<tr>
|
9 |
<td>Product 2</td> |
10 |
<td>Some random description</td> |
11 |
<td>25 $</th> |
12 |
<td><a href="#">Add to cart</a></td> |
13 |
</tr>
|
Groß! Jetzt an der Stelle, wo die Tabellenzeilen waren, geben Sie den folgenden PHP-Code ein:
1 |
|
2 |
<?php
|
3 |
|
4 |
$sql="SELECT * FROM products ORDER BY name ASC"; |
5 |
$query=mysql_query($sql); |
6 |
|
7 |
while ($row=mysql_fetch_array($query)) { |
8 |
|
9 |
?>
|
10 |
<tr>
|
11 |
<td><?php echo $row['name'] ?></td> |
12 |
<td><?php echo $row['description'] ?></td> |
13 |
<td><?php echo $row['price'] ?>$</td> |
14 |
<td><a href="index.php?page=products&action=add&id=<?php echo $row['id_product'] ?>">Add to cart</a></td> |
15 |
</tr>
|
16 |
<?php
|
17 |
|
18 |
}
|
19 |
|
20 |
?>
|
- Also, zuerst verwenden wir SELECT, um die Produkte abzurufen, dann durchlaufen wir jede Zeile aus der Datenbank und geben sie auf die Seite in einer Tabellenzeile zurück.
- Sie können sehen, dass der Anker mit derselben Seite verknüpft ist (wenn der Benutzer auf den Anker klickt, das Produkt, das er dem Einkaufswagen / der Sitzung hinzugefügt hat). Wir übergeben nur einige zusätzliche Variablen wie die ID des Produkts.
Wenn Sie einen der Links zum Hinzufügen in den Einkaufswagen anzeigen, sehen Sie unten auf der Seite, dass die ID des Produkts übergeben wurde.

Schritt 7
Lassen Sie uns diesen Anker arbeiten, indem Sie den folgenden Code oben auf unserer Seite hinzufügen:
1 |
|
2 |
<?php
|
3 |
|
4 |
if(isset($_GET['action']) && $_GET['action']=="add"){ |
5 |
|
6 |
$id=intval($_GET['id']); |
7 |
|
8 |
if(isset($_SESSION['cart'][$id])){ |
9 |
|
10 |
$_SESSION['cart'][$id]['quantity']++; |
11 |
|
12 |
}else{ |
13 |
|
14 |
$sql_s="SELECT * FROM products |
15 |
WHERE id_product={$id}"; |
16 |
$query_s=mysql_query($sql_s); |
17 |
if(mysql_num_rows($query_s)!=0){ |
18 |
$row_s=mysql_fetch_array($query_s); |
19 |
|
20 |
$_SESSION['cart'][$row_s['id_product']]=array( |
21 |
"quantity" => 1, |
22 |
"price" => $row_s['price'] |
23 |
);
|
24 |
|
25 |
|
26 |
}else{ |
27 |
|
28 |
$message="This product id it's invalid!"; |
29 |
|
30 |
}
|
31 |
|
32 |
}
|
33 |
|
34 |
}
|
35 |
|
36 |
?>
|
- Wenn die GET-Variable namens action gesetzt ist und ihr Wert ADD ist, führen wir den Code aus.
- Wir stellen sicher, dass die ID, die die Variable GET durchlaufen hat, eine ganze Zahl ist
- Wenn die ID des Produkts in der Warenkorb-SESSION ist, erhöhen wir einfach die Menge um 1
- Wenn die ID nicht in der Sitzung vorhanden ist, müssen wir sicherstellen, dass die ID, die die Variable GET durchlaufen hat, in der Datenbank vorhanden ist. Wenn dies der Fall ist, greifen wir den Preis und erstellen seine Sitzung. Ist dies nicht der Fall, setzen wir eine Variable namens message, die unseren Fehler enthält.
Lassen Sie uns prüfen, ob diese Nachrichtenvariable gesetzt ist und sie auf die Seite zurückgeben (geben Sie diesen Code unter dem H1-Seitentitel ein):
1 |
|
2 |
<?php
|
3 |
if(isset($message)){ |
4 |
echo "<h2>$message</h2>"; |
5 |
}
|
6 |
?>
|
Hier können Sie die komplette products.php Seite sehen.
1 |
|
2 |
<?php
|
3 |
|
4 |
if(isset($_GET['action']) && $_GET['action']=="add"){ |
5 |
|
6 |
$id=intval($_GET['id']); |
7 |
|
8 |
if(isset($_SESSION['cart'][$id])){ |
9 |
|
10 |
$_SESSION['cart'][$id]['quantity']++; |
11 |
|
12 |
}else{ |
13 |
|
14 |
$sql_s="SELECT * FROM products |
15 |
WHERE id_product={$id}"; |
16 |
$query_s=mysql_query($sql_s); |
17 |
if(mysql_num_rows($query_s)!=0){ |
18 |
$row_s=mysql_fetch_array($query_s); |
19 |
|
20 |
$_SESSION['cart'][$row_s['id_product']]=array( |
21 |
"quantity" => 1, |
22 |
"price" => $row_s['price'] |
23 |
);
|
24 |
|
25 |
|
26 |
}else{ |
27 |
|
28 |
$message="This product id it's invalid!"; |
29 |
|
30 |
}
|
31 |
|
32 |
}
|
33 |
|
34 |
}
|
35 |
|
36 |
?>
|
37 |
<h1>Product List</h1> |
38 |
<?php
|
39 |
if(isset($message)){ |
40 |
echo "<h2>$message</h2>"; |
41 |
}
|
42 |
?>
|
43 |
<table>
|
44 |
<tr>
|
45 |
<th>Name</th> |
46 |
<th>Description</th> |
47 |
<th>Price</th> |
48 |
<th>Action</th> |
49 |
</tr>
|
50 |
|
51 |
<?php
|
52 |
|
53 |
$sql="SELECT * FROM products ORDER BY name ASC"; |
54 |
$query=mysql_query($sql); |
55 |
|
56 |
while ($row=mysql_fetch_array($query)) { |
57 |
|
58 |
?>
|
59 |
<tr>
|
60 |
<td><?php echo $row['name'] ?></td> |
61 |
<td><?php echo $row['description'] ?></td> |
62 |
<td><?php echo $row['price'] ?>$</td> |
63 |
<td><a href="index.php?page=products&action=add&id=<?php echo $row['id_product'] ?>">Add to cart</a></td> |
64 |
</tr>
|
65 |
<?php
|
66 |
|
67 |
}
|
68 |
|
69 |
?>
|
70 |
|
71 |
</table>
|
Hier ist die Fehlermeldung, wenn die ID des Produkts ungültig ist

Schritt 8
Lass uns zur index.php zurückkehren und die Sidebar erstellen. Fügen Sie den folgenden Code hinzu:
1 |
|
2 |
<h1>Cart</h1> |
3 |
<?php
|
4 |
|
5 |
if(isset($_SESSION['cart'])){ |
6 |
|
7 |
$sql="SELECT * FROM products WHERE id_product IN ("; |
8 |
|
9 |
foreach($_SESSION['cart'] as $id => $value) { |
10 |
$sql.=$id.","; |
11 |
}
|
12 |
|
13 |
$sql=substr($sql, 0, -1).") ORDER BY name ASC"; |
14 |
$query=mysql_query($sql); |
15 |
while($row=mysql_fetch_array($query)){ |
16 |
|
17 |
?>
|
18 |
<p><?php echo $row['name'] ?> x <?php echo $_SESSION['cart'][$row['id_product']]['quantity'] ?></p> |
19 |
<?php
|
20 |
|
21 |
}
|
22 |
?>
|
23 |
<hr /> |
24 |
<a href="index.php?page=cart">Go to cart</a> |
25 |
<?php
|
26 |
|
27 |
}else{ |
28 |
|
29 |
echo "<p>Your Cart is empty. Please add some products.</p>"; |
30 |
|
31 |
}
|
32 |
|
33 |
?>
|
- Zuerst prüfen wir, ob der Sitzungswagen eingestellt ist. Ist dies nicht der Fall, zeigen wir die Nachricht an und weisen den Benutzer darauf hin, dass der Einkaufswagen leer ist.
- Als nächstes machen wir einen mysql SELECT, aber wir wählen nur die Produkte aus, die auch in der Sitzung existieren. Um dies zu erreichen, verwenden wir die foreach-Funktion. Wir durchlaufen also die Sitzung und fügen die Produkt-ID zu SELECT hinzu. Als nächstes verwenden wir die Funktion substr, um das letzte Komma aus SELECT zu entfernen.
- Am Ende geben wir die Daten an den Browser aus.
Schauen Sie sich die Bilder an:


Da die index.php eine Vorlage für alle Dateien ist, ist die Seitenleiste auch in der cart.php sichtbar. Ist das nicht cool ?!
Schritt 9
Öffnen Sie schließlich cart.php und geben Sie den folgenden Code ein:
1 |
|
2 |
<h1>View cart</h1> |
3 |
<a href="index.php?page=products">Go back to products page</a> |
4 |
<form method="post" action="index.php?page=cart"> |
5 |
|
6 |
<table>
|
7 |
|
8 |
<tr>
|
9 |
<th>Name</th> |
10 |
<th>Quantity</th> |
11 |
<th>Price</th> |
12 |
<th>Items Price</th> |
13 |
</tr>
|
14 |
|
15 |
<?php
|
16 |
|
17 |
$sql="SELECT * FROM products WHERE id_product IN ("; |
18 |
|
19 |
foreach($_SESSION['cart'] as $id => $value) { |
20 |
$sql.=$id.","; |
21 |
}
|
22 |
|
23 |
$sql=substr($sql, 0, -1).") ORDER BY name ASC"; |
24 |
$query=mysql_query($sql); |
25 |
$totalprice=0; |
26 |
while($row=mysql_fetch_array($query)){ |
27 |
$subtotal=$_SESSION['cart'][$row['id_product']]['quantity']*$row['price']; |
28 |
$totalprice+=$subtotal; |
29 |
?>
|
30 |
<tr>
|
31 |
<td><?php echo $row['name'] ?></td> |
32 |
<td><input type="text" name="quantity[<?php echo $row['id_product'] ?>]" size="5" value="<?php echo $_SESSION['cart'][$row['id_product']]['quantity'] ?>" /></td> |
33 |
<td><?php echo $row['price'] ?>$</td> |
34 |
<td><?php echo $_SESSION['cart'][$row['id_product']]['quantity']*$row['price'] ?>$</td> |
35 |
</tr>
|
36 |
<?php
|
37 |
|
38 |
}
|
39 |
?>
|
40 |
<tr>
|
41 |
<td colspan="4">Total Price: <?php echo $totalprice ?></td> |
42 |
</tr>
|
43 |
|
44 |
</table>
|
45 |
<br /> |
46 |
<button type="submit" name="submit">Update Cart</button> |
47 |
</form>
|
48 |
<br /> |
49 |
<p>To remove an item, set it's quantity to 0. </p> |
Der Code ist ähnlich dem von index.php und products.php, also werde ich nicht alles nochmal erklären. Sie sollten feststellen, dass die Menge nicht in einem Formular angezeigt wird, sondern jetzt in einem Eingabefeld angezeigt wird (damit wir die Menge ändern können). Auch die Tabelle ist in ein Formular-Tag eingebunden. Um den Gesamtpreis der Artikel zu erhalten, multiplizieren wir die Menge des spezifischen Produkts (aus der Sitzung) mit dem Preis. Dies wird in jeder Schleife durchgeführt.
HINWEIS: Die Eingabe ist ein Array, der Schlüssel ist die ID des Produkts und die Menge ist der Mengenwert.

Schritt 10
Der letzte Schritt, den wir machen müssen, besteht darin, das Formular zum Laufen zu bringen. Fügen Sie diesen Code also oben auf der Seite cart.php hinzu.
1 |
|
2 |
if(isset($_POST['submit'])){ |
3 |
|
4 |
foreach($_POST['quantity'] as $key => $val) { |
5 |
if($val==0) { |
6 |
unset($_SESSION['cart'][$key]); |
7 |
}else{ |
8 |
$_SESSION['cart'][$key]['quantity']=$val; |
9 |
}
|
10 |
}
|
11 |
|
12 |
}
|
- Zuerst prüfen wir, ob das Formular gesendet wurde. Wenn es übergeben wurde und der Wert der Eingabe Null war, wird diese Sitzung deaktiviert.
- Wenn der Wert ein anderer Wert ist, setzen wir stattdessen die Menge auf diesen Wert.
Hier ist die komplette cart.php
1 |
|
2 |
<?php
|
3 |
|
4 |
if(isset($_POST['submit'])){ |
5 |
|
6 |
foreach($_POST['quantity'] as $key => $val) { |
7 |
if($val==0) { |
8 |
unset($_SESSION['cart'][$key]); |
9 |
}else{ |
10 |
$_SESSION['cart'][$key]['quantity']=$val; |
11 |
}
|
12 |
}
|
13 |
|
14 |
}
|
15 |
|
16 |
?>
|
17 |
|
18 |
<h1>View cart</h1> |
19 |
<a href="index.php?page=products">Go back to the products page.</a> |
20 |
<form method="post" action="index.php?page=cart"> |
21 |
|
22 |
<table>
|
23 |
|
24 |
<tr>
|
25 |
<th>Name</th> |
26 |
<th>Quantity</th> |
27 |
<th>Price</th> |
28 |
<th>Items Price</th> |
29 |
</tr>
|
30 |
|
31 |
<?php
|
32 |
|
33 |
$sql="SELECT * FROM products WHERE id_product IN ("; |
34 |
|
35 |
foreach($_SESSION['cart'] as $id => $value) { |
36 |
$sql.=$id.","; |
37 |
}
|
38 |
|
39 |
$sql=substr($sql, 0, -1).") ORDER BY name ASC"; |
40 |
$query=mysql_query($sql); |
41 |
$totalprice=0; |
42 |
while($row=mysql_fetch_array($query)){ |
43 |
$subtotal=$_SESSION['cart'][$row['id_product']]['quantity']*$row['price']; |
44 |
$totalprice+=$subtotal; |
45 |
?>
|
46 |
<tr>
|
47 |
<td><?php echo $row['name'] ?></td> |
48 |
<td><input type="text" name="quantity[<?php echo $row['id_product'] ?>]" size="5" value="<?php echo $_SESSION['cart'][$row['id_product']]['quantity'] ?>" /></td> |
49 |
<td><?php echo $row['price'] ?>$</td> |
50 |
<td><?php echo $_SESSION['cart'][$row['id_product']]['quantity']*$row['price'] ?>$</td> |
51 |
</tr>
|
52 |
<?php
|
53 |
|
54 |
}
|
55 |
?>
|
56 |
<tr>
|
57 |
<td colspan="4">Total Price: <?php echo $totalprice ?></td> |
58 |
</tr>
|
59 |
|
60 |
</table>
|
61 |
<br /> |
62 |
<button type="submit" name="submit">Update Cart</button> |
63 |
</form>
|
64 |
<br /> |
65 |
<p>To remove an item set its quantity to 0. </p> |

Ich hoffe, dir hat dieses Tutorial gefallen. Wenn Sie irgendwelche Fragen haben, sehen Sie sich unbedingt das ausführliche Video-Tutorial an!



