Wahrenkorb Formular
Ein Wahrenkorb ist ein Zwischenspeicher für Angaben zu Produkten oder Items, welche z.B. aus unterschiedlichen Formularen oder Linklisten ausgewählt wurden. Bei jeder Bestellung oder Auswahl wird eine Sessionvariable hinzugefügt oder gefüllt.
Wahrenkorb Formular
Das folgende Wahrenkorb-Formular zielt wieder auf diese Seite:
<form action="wahrenkorb_formular.php" method="post">
Auch andere Formulare könnten auf diese Seite zielen, denn hier werden alle Ausgewählten
Items in einem Array zusammengeführt.
Session Array füllen
Im Beisbiel erlaube ich nicht die mehrfache Bestellung des selben Items (eine Bestellung Tomaten wäre vielleicht ein Container voll oder eine Tonne). Das kann aber leicht abgeändert werden in einzelne Tomaten und Mehrfachbestellung.
empty()
is_array(), array_unique() und array_merge()
<?php
session_start();
// Die Session ist eröffnet, ich kümmere mich hier nicht um ID oder Namen wie bei einem Login
// empty liefert TRUE, wenn Variable nicht definiert, leer oder gleich 0 ist
// wenn nicht existent wird ein leerer Array zugewiesen
if ( empty( $_SESSION['products'] ) ) {
$_SESSION['products']=array();
}
// der Session hinzufügen
// von Formular
if ( is_array( $_POST['form_products'])) { // falls das ein (vorhandener) Array ist
$_SESSION['products'] = array_unique( // entferne doppelte Werte
array_merge( $_SESSION['products'], // aus den beiden verschmolzenen Arrays
$_POST['form_products'] )
);
}
// von Liste
if ( is_array( $_GET['liste_products'] ) ) { // falls das ein (vorhandener) Array ist
if ($_GET['liste_products'][0] == "Tomaten" || $_GET['liste_products'][0] == "Gurken" || $_GET['liste_products'][0] == "Zwiebeln") {
$_SESSION['products'] = array_unique( // entferne doppelte Werte
array_merge( $_SESSION['products'], // aus den beiden verschmolzenen Arrays
$_GET['liste_products'][0] )
);
}
}
?>
Wahrenkorb Linklisten
Falls auch von Linklisten (die auf diese Seite zielen) ausgewählt werden kann; wird mit dem Array $_GET statt $_POST übermittelt und empfangen. In diesem Fall ist die Eingabe aber ganz genau zu checken (bösen Code nicht einfach durchschleusen), ich weiss ja, was ich erwarte. (Bei grösseren Listen ist das natürlich eleganter zu vollziehen, als im Beispiel oben.