Eines Warenkorbsystem für Anfänger

Ein kurzes Tutorial für Anfänger um ein einfaches aber funktionelles Warenkorbsystem zu erstellen. Freue mich über Rückmeldungen und Kritik - denn nur so verbessert man sich :)

PHP Cart Tutorial (Einfacher Warenkorb) Ein kurzes Tutorial zum erstellen eines einfachen Warenkorb Systems. Ich hoffe ich hab mich nicht verhaspelt und es ist einfach verständlich für Anfänger. Schritt 1: Als WebDesigner/Entwickler stößt man sicher häufiger auf Kleinunternehmer als auf große Konzerne. Wir gehen davon aus das wir einen Kunden haben mit einem kleinen Produktbestand den er nun Online vermarkten möchte. Die Shopping Cart kann in seine bestehende Seite integriert werden, das minimiert Kosten und erweitert die bestehende Webpäsenz. Wir wollen nun eine Art Einkaufswagen-System erstellen in dem Kunden Produkte hinzufügen können, löschen und Aktualisierungen vornehmen zu können - die sie gerne kaufen möchten. Das Design ist sehr schlicht gehalten. Wir wollen uns in diesem Tutorial weniger um das Aussehen kümmern sondern um die Funktionalität. Das Tutorial ist ein einfache Schritte gegliedert die es auch einem "Neuling" möglich machen seine erste Shopping Cart zu erstellen. Um das Skript in Aktion sehen zu können wird ein Server benötigt der PHP unterstützt und über MySQL zur Verwendung von Datenbanken verfügt. Die Datenbank aufsetzten Wir nehmen als Beispiel einen Buchhändler mit einer kleinen Auswahl von Büchern. Falls du noch nicht sehr vertraut mit MySQL bist, kannst du zur Übung selbst noch ein paar Bücher hinzufügen. Wir wollen nun die Datenbank anlegen und ein Lager hinzufügen:
CREATE TABLE books (
id int(6) unsigned NOT NULL auto_increment,
title varchar(100) NOT NULL default '',
author varchar(100) NOT NULL default '',
price decimal(5,2) NOT NULL default '00.00',
PRIMARY KEY (id)
) TYPE=MyISAM;

INSERT INTO books VALUES (1, 'Geisterseher', 'Schiller Friedrich', '24.99');
INSERT INTO books VALUES (2, 'Wanderhure', 'Oolon Colluphid', '17.99');
INSERT INTO books VALUES (3, 'Micha der Streuner', 'Oolon Colluphid', '14.99');
Um Programmieren die Arbeit mit MySQL zu erleichtern wurde PHPmy Admin geschaffen. Bevor du die Daten einpflegen kannst musst du die MySQL Datenbank anlegen, nachdem du das getan hast kannst du die Datenbank in phpMy Admin aufrufen. Die Datenbank ist Links aufgelistet. Klicke dich in die von dir zuvor angelegte Datenbank. Neue Tabelle in Datenbank `Datenbank´ erstellen. Gib den Namen books ein und 4 Felder und klicke auf OK. Nun kannst du die Daten von Punkt 1. bis 8. eingeben. Bitte achte immer auf die groß und klein Schreibung! Danach kannst du unter dem Punkt Einfügen die Daten von 9. bis 11. in die Tabelle eingeben. Die oben angebenen Daten findest du im Anhang in der Datei php-cart-1.txt Nachdem wir unsere Datenbank angelegt haben können wir damit beginnen unsere Shopping Cart anzulegen. Welche Ansprüche an die Shopping Cart gestellt werden Die Cart die wir erstellen sollte einfach zu bedienen sein für Internet Nutzer. Wir wollen eine Nachricht auf jeder Seite anzeigen (z.B. " Sie haben 5 Artikel in Ihrem Warenkorb"), auf die der Kunde klicken kann um in den Warenkorb zu gelangen. Jeder Artikel kann gelöscht werden oder die Anzahl kann verändert werden. Alle Lager Details haben wir in unserer Datenbank angelegt, alles was wir nun benötigen für jeden Kunden ist die ID jedes Produkts das zum Warenkorb hinzugefügt wird. Um dies umzusetzten nutzen wir PHP built-in Session Handles Kapazitäten. Sessions in PHP nutzen PHPs Session Handles sind einfach zu verstehen Um die Session zu beginnen, fügen wir einfach session start(); hinzu am Anfang unseres Codes. Danach können die Session Variablen oder Arrays etc. hinzugefügt werden: Code:
1  $_SESSION['name'] = 'Matthew'; $_SESSION['age'] = 31;

Diese $_SESSION Varaible wird nun auf allen Webseiten unseres PHP Skripts verfügbar sein (wenn session start(); als erstes angeben wird. Ein paar Worte über Cookies Das Grundlegende verhalten von Sessions ist die Session ID weiter zu geben (ein langer String aus Zahlen und Nummern die den Kunden identifizieren für den Server) wie ein Cookie auf dem lokalen PC. Auch wenn die Funktion Cookies ausgeschaltet ist funktioniert der Befehl Session - PHP gibt die ID jeder Seite weiter (in der Form meineseite.php?PHPSESSIONID=) somit gehen gemachte Informationen oder Artikel im Warenkorb nicht "verloren" von Seite zu Seite. Die Cart (Warenkorb) erstellen Wir werden nun den Inhalt der Shopping Cart in einer List anlegen wo die Produkt IDs durch Komma getrennt in der Session Namens (erwartungsgemäß) ´cart` - als Beispiel angelegt werden, in der Cart mit "1,1,3,1,2" sind 3 Artikel aufgelistet 3Produkte von #1, und je ein Produkt von #2 und #3. Als erstes erstellen wir den Code um auf jeder Seite den Text "Sie haben X Artikel..." Nachricht auf jeder Seite anzeigen zu lassen: Code:
 1  function writeShoppingCart() { 
 2 $cart = $_SESSION['cart']; 
 3 if (!$cart) { 
 4 return '<p>Sie haben keine Artikel in Ihrem Warenkorb</p>'; 
 5 } else { 
 6 // Gliedert die Session variale auf 
 7 $items = explode(',',$cart); 
 8 
 9 return '<p>Sie haben <a href="cart.php">'.count($items).' item'.$s.' in Ihrem Warenkorb</a></p>'; 
10 } 
11 } 

Den hier angegebenen Code finden Sie in der Datei php-cart-2.txt Diese Funktion bekommt als erstes den Wert ´cart1´Session Variable zugewiesen und wird in der lokalen Variable $cart gespeichert. Wenn die Cart (Warenkorb) leer ist, geben wir eine passende Nachricht zurück; wenn nicht nutzen wir die Funktion explode() um ein Array von allen Produkten auf der Cart (Warenkorb) zu erstellen und diese dann zu zählen count() und das Resultat anzuzeigen. Nun können wir die richtige Nachricht irgendwo auf der Seite anzeigen: echo writeShoppingCart(); Ich hoffe ich habe mich verständlich ausgedrückt. Machen wir weiter an dem Punkt den Inhalt der Cart (Warenkorb) selbst anzuzeigen. Zeig mir die Artikel Die Shopping Cart (Warenkorb) Seite selbst kann auf verschiedene erreicht werden. Der Kunde hat vielleicht auf den Link erstellt durch die Funktion writeShoppingCart() oben geklickt, oder vielleicht auf den Link ´Zum Warenkorb hinzufügen´ auf der Produkt Seite. Wenn das letztere geschehen ist, müssen wir diesen Klick abfangen und den Inhalt unseres Warenkorbs aktualisieren bevor die neue Produktliste angezeigt wird - einfach genug, alles was wir tun müssen ist die ID des gewählten Produkts zur ´cart´Session Variablen hinzuzufügen. Unser Produkt Link wird wie folgt aussehen:
<a href="cart.php?action=add&id=1">Zum Warenkorb hinzufügen</a>
Keine Gedanken wegen der ´Aktion=add´, dazu kommen wir später. Die ID kann nun von $_GET[?id?] verarbeitet werden und fügt der Cart (Warenkorb) hinzu: Code:
1  $cart = $_SESSION['cart']; 
2 if ($cart) { 
3 $cart .= ','.$_GET['id']; 
4 } else { 
5 $cart = $_GET['id']; 
6 } 
7 $_SESSION['cart'] = $cart;

Nun beschäftigen wir uns mit dem Inhalt unserer Cart (Warenkorb)! Mehrere Artikel, ein Produkt Wie in unserem Beispiel zuvor ist es möglich das ein Kunde mehr als ein Arikel von einem Produkt bestellen möchte. Wir wollen nun etwas hinzufügen das eine Kombination des selben Produkts in einer Anzeige angezeigt wird (mit einer entsprechenden Anzeige der genauen Anzahl).
1  $cart = $_SESSION['cart'];
2 if ($cart) {
3 $items = explode(',',$cart);
4 $contents = array();
5 foreach ($items as $item) {
6 $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
7 }

Nun nachdem wir die Liste der Produkt IDs verwarbeitet haben, haben wir wiederholt durch sie ein neues Array namens $contents erstellt, welche aus dem Key=>Werte Paar wo der key durch die Produkt ID und dem Wert der Anzahl des Produkte im Warenkob zusammengesetzt wird. So um unserer Bespiel zuvor zu verwenden, eine Cart (warenkorb) enthält "1,1,3,1,2" wird in ein Array umgesetzt ´1´=>3,´2´=>1,´3´=>1. Nun da wir eine akkuraten Zähler für jedes Produkt haben, nun können wir die Produkte eine anfrage an die Datenbank senden um die Details in einer Tabelle auszugeben:
 1  $total = 0;
 2 $output[] = '<table>';
 3 foreach ($contents as $id=>$qty) {
 4 $sql = 'SELECT * FROM books WHERE id = '.$id;
 5 $result = $db->query($sql);
 6 $row = $result->fetch();
 7 extract($row);
 8 $output[] = '<tr>';
 9 $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Löschen</a></td>';
10 $output[] = '<td>'.$title.' von '.$author.'</td>';
11 $output[] = '<td>'.$price.'?</td>';
12 $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
13 $output[] = '<td>'.($price * $qty).'?</td>';
14 $total += $price * $qty;
15 $output[] = '</tr>';
16 }
17 $output[] = '</table>';
18 $output[] = '<p>Gesamtsumme: &pound;'.$total.'</p>';

Notiz. Ich nutze eine PHP KLasse um die Datenbank Verbindungen zu verwalten, ihr Code muss etwas umgeschrieben werden. Ganz einfach - wir wiederholen das neue Array $contents und schicken eine anfrage an die Datenbank für jede Produkt ID. Dann geben wir die relevanten Details für jedes Produkt aus. Title, Autor und Preis und am zeigen wir den Gesamtpreis für die Bestellung an. Für jeden Artikel fügen wir einen Link ein um den Artikel vom Warenkorb zu löschen, eine Textbox die die momentane Anzahl des Artikel anzeigt und ein Gesamtpreis (dieser wird nur vom Basis Preis abweichen wenn die Anzahl pro Produkt höher als 1 ist). Der Grund warum ich $output[] = verwende ist weil ich das Array später auf dem Bildschirm ausgeben will. So weit so gut - nun wie löschen wir Produkte von dem Warenkorb? Ein Produkt löschen Wie oben gezeigt, der Link um eine Produkt zu löschen folgt dem selben Format wie der `zum Warenkorb hinzufügen´Link:
<a href="cart.php?action=delete&id=1">Löschen</a>
Erweitern wir den Code von vorhin und fügen switch() hinzu um die verschiedenen Aktionen zu verwalten die im Warenkorb geschehen können:
 1  $cart = $_SESSION['cart'];
 2 $action = $_GET['action'];
 3 switch ($action) {
 4 case 'add':
 5 if ($cart) {
 6 $cart .= ','.$_GET['id'];
 7 } else {
 8 $cart = $_GET['id'];
 9 }
10 break;
11 case 'delete':
12 if ($cart) {
13 $items = explode(',',$cart);
14 $newcart = '';
15 foreach ($items as $item) {
16 if ($_GET['id'] != $item) {
17 if ($newcart != '') {
18 $newcart .= ','.$item;
19 } else {
20 $newcart = $item;
21 }
22  }
23 }
24 $cart = $newcart;
25 }
26 break;
27 }
28 $_SESSION['cart'] = $cart;

Neu hinzugefügt ´delte´case durch die ´cart´session, sucht nach Produkt IDs die NICHT zu löschen sind und fügt diese zu einer temporären Variablen namens $newcart hinzu. Nachdem der Vorgang abgeschlossen ist wird der neue Inhalt wieder in $cart eingefügt. Produkt aktualisieren Als letztes werden wir Kunden erlauben den Inhalt des Warenkorbs zu aktualisieren, durch eine manuelle Änderung der Anzahl der Produkte. Um das umzusetzten, werden wir die Shopping cart in den Befehl
einfügen, damit der ´aktualisieren´ Button das Formular neu lädt:
 1  $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
 2 $output[] = '<table>';
 3 foreach ($contents as $id=>$qty) {
 4 $sql = 'SELECT * FROM books WHERE id = '.$id;
 5 $result = $db->query($sql);
 6 $row = $result->fetch();
 7 extract($row);
 8 $output[] = '<tr>';
 9 $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Löschen</a></td>';
10 $output[] = '<td>'.$title.' by '.$author.'</td>';
11 $output[] = '<td>'.$price.'?</td>';
12 $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
13 $output[] = '<td>'.($price * $qty).'?</td>';
14 $total += $price * $qty;
15 $output[] = '</tr>';
16 }
17 $output[] = '</table>';
18 $output[] = '<p>Gesamtsumme: &pound;'.$total.'</p>';
19 $output[] = '<div><button type="submit">Warenkorb aktualisieren</button></div>';
20 $output[] = '</form>';

Anmerkung: Obwohl das Formular die POST Methode nutzt ist die GET Variable eingebunden, "action=update". Nun kann die Anzahl aktualisiert werden:
 1  case 'update':
 2 if ($cart) {
 3 $newcart = '';
 4 foreach ($_POST as $key=>$value) {
 5 if (stristr($key,'qty')) {
 6 $id = str_replace('qty','',$key);
 7 $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
 8 $newcart = '';
 9 foreach ($items as $item) {
10 if ($id != $item) {
11 if ($newcart != '') {
12 $newcart .= ','.$item;
13 } else {
14 $newcart = $item;
15 }
16  }
17  }
18 for ($i=1;$i<=$value;$i++) {
19 if ($newcart != '') {
20 $newcart .= ','.$id;
21 } else {
22 $newcart = $id;
23 }
24 }
25  }
26  }
27  }
28  $cart = $newcart;
29 break;

Dieser Code steht in der Datei php-cart-8.tx Das sieht vielleicht kompliziert aus, aber es folgt einer klaren Linie. Wir fragen den Inhalt vom $_POST array ab (welche all unsere Anzahl Angaben beinhaltet) und setzen die relevaten IDs um. Für jedes Produkt, wir löschen die vorherigen abläufe und fügen die aktuellen Anzahlen wieder ein. Es gibt viele Möglichkeit das umzusetzten - z.B., durch zählen der bestehenden Nummern von jedem Produkt aktuell im Warenkorb und finden heraus welche Produkte hinzugefügt und welche Produkte gelöscht werden müssen - ich habe den einfachsten Weg für mich gewählt. Zusammenfassung Das wars schon! Eine funktionalle und einfache Shopping Cart - hier ist die letzte Funktion die den Inhalt der Shopping Cart anzeigt bzw. ausgibt:
 1 
 2 function showCart() {
 3 $cart = $_SESSION['cart'];
 4 if ($cart) {
 5 $items = explode(',',$cart);
 6 $contents = array();
 7 foreach ($items as $item) {
 8 $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
 9 }
10 $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
11 $output[] = '<table>';
12 foreach ($contents as $id=>$qty) {
13 $sql = 'SELECT * FROM books WHERE id = '.$id;
14  $result = $db->query($sql);
15 $row = $result->fetch();
16  extract($row);
17 $output[] = '<tr>';
18 $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Löschen</a></td>';
19 $output[] = '<td>'.$title.' by '.$author.'</td>';
20 $output[] = '<td>&pound;'.$price.'</td>';
21  $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
22 $output[] = '<td>&pound;'.($price * $qty).'</td>';
23 $total += $price * $qty;
24 $output[] = '</tr>';
25 }
26  $output[] = '</table>';
27  $output[] = '<p>Gesamtsumme: &pound;'.$total.'</p>';
28  $output[] = '<div><button type="submit">Aktualisieren</button></div>';
29  $output[] = '</form>';
30  } else {
31  $output[] = '<p>Ihr Warenkorb ist leer.</p>';
32  }
33 return join('',$output);
34 }

Dieser Code ist aus der Datei php-cart-9.txt Wenn der Warenkorb leer ist wird eine entsprechende Nachricht angezeigt. Ich hoffe das Tutorial was hilfreich. Hier könnt ihr euch eine Live Demo der Shopping Cart ansehen (http://phpcart.web3hoster.de). Den Quellcode könnt ihr euch auf meiner Homepage (http://web3hoster.de/downloads.php) downloaden. Ich freue mich über Rückmeldungen und Verbesserungsvorschläge. Ich hoffe euch hat das Tutorial gefallen :)

Erfahrungen


Hallo,

die Anleitung finde ich klasse, nur kann ich leider nicht nachvollziehen wo welcher code stehen muss, kommt alles in Eine Datei oder sind es zwei?
Geschrieben von freak83 Am 24.08.2013 07:36:07

Hallo,

ich suche genau so ein skript, jedoch ist es für mich als Anfänger etwas schwieriger zu durchschauen. Könnten sie vielleicht es zum Download stellen, da die angebebenen Links leider nicht mehr funktionieren.

Mit freundlichen Grüßen
Geschrieben von maxsimon Am 28.01.2011 13:33:11

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe

Verwandte Beiträge

Dateien per Userinterface hochladen

Um Dateien per Userinterface hochladen zu können, benötigt man vergleichbar wenige Kenntnisse in der Programmiersprache PHP ...

Lukas Beck

Autor : Lukas Beck
Kategorie: PHP-Tutorials

Webserver, Sicherheit ist realisierbar

Diese Facharbeit beschäftigt sich mit dem Herzstück eines Netzwerkes, dem Webserver. ...

me1@

Autor : me1@
Kategorie: Linux & Server Tutorials

PHP 7 Virtual Machine

Dieser Artikel zielt darauf ab, einen Überblick über die Zend Virtual Machine, wie es in PHP 7 gefunden wird. ...

admin

Autor : admin
Kategorie: PHP-Tutorials

plotting masters - a professional guide - Teil II

Grafische Interpolation und Bestapproximation von numerischen Wertepaaren: Wir wollen Punkte auf einer Zeichenebene über verschiedene Verfahren miteinander verbinden. ...

EVAMasters

Autor : EVAMasters
Kategorie: PHP-Tutorials

IP-Sperre

IP-Sperre mit PHP und MySQL Oder wie man einen User für eine gewisse Zeit aussperrt. ...

webmaster1@

Autor : webmaster1@
Kategorie: PHP-Tutorials

SVN Server einrichten

Wie man unter Linux einen Subversion Server einrichtet. ...

admin

Autor : admin
Kategorie: Linux & Server Tutorials

Was muss ich in WordPress einstellen, damit Google Fonts nicht mehr geladen werden?

Möchten Du WordPress davon abhalten, Google Fonts zu verwenden? Hier erfährst Du, was du dafür in WordPress einstellen musst. ...

admin

Autor : admin
Kategorie: Sonstige Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen