Hallo bjbenderTV,
ok, es gibt zwei Ansätze zum Problem "Mengenberechnung".
Möglichkeit 1 ist, dass Du bei einer Änderung der Bestellmenge keinen Submit machst, sondern die Berechnung mittels JavaScript durchführst. Solange das "Gesamtpreis = Grundpreis mal Menge" ist, ist das kein Problem. Schwieriger wird es, sobald Rabattstaffeln ins Spiel kommen. Die kannst Du im JavaScript programmieren, oder Du machst einen AJAX-Request zum Server, um den Preis bestimmen zu lassen. Das ist dann für Fortgeschrittene :)
Problem bei JavaScript Lösungen ist immer, dass ein Anwender JavaScript abgeschaltet haben kann. In dem Fall bist Du aber auch mit deiner aktuellen Lösung verloren, denn dieses "onchange=submit" setzt ja auch JavaScript voraus.
Der allgemeine Fallback für "JavaScript ist abgeschaltet" ist, dass Du auf der Folgeseite eine Bestellübersicht anzeigst, die die korrekten und am Server berechneten Preise enthält. Diese Berechnung musst Du ohnehin ausführen, weil Du einem Rechenergebnis, das der Client Dir meldet, grundsätzlich nicht vertrauen kannst. Anwender können Dir alles mögliche senden.
Möglichkeit 2 ist, dass Du den Warenkorb zum "Affenformular" umbaust. D.h. du submittest nicht nach step1.php, sondern immer zur Warenkorbseite. Die berechnet die Preise neu, und wenn es nur ein automatischer Postback nach Mengenänderung war, wird einfach nur der neuberechnete Warenkorb wieder angezeigt. JavaScript mit clientseitiger Neuberechnung ohne Postback wäre dann ein progressive Enhancement. Wenn die Warenkorbseite erkennt, dass der Anwender "Zur Kasse" geklickt hat, leitet sie nach step1.php weiter (über die header-Funktion: header("location:step1.php")
).
Allen Möglichkeiten ist es gemeinsam, dass die Datenhaltung des Warenkorb-Inhaltes NICHT in Hidden Fields des Browsers erfolgt. Du hast eine Session, und darin ist der Warenkorbinhalt zu speichern. Das sollte ein Array aus Bestellpositionen sein, und jede Bestellposition besteht - z.B. - aus Artikelnummer, Grundpreis und Menge. Basierend auf diesem Array baut sich der Warenkorb neu auf und basierend auf diesem Array wird auf der Folgeseite die Bestellübersicht erzeugt. Der Browser hat nur den Session-Cookie mit der Session-ID darin. Darum, dass Du den bekommst, musst Du Dich nicht kümmern, das macht PHP für Dich.
Im Detail ist das alles nicht einfach, aber ich kann und will es Dir auch nicht vorprogrammieren.
Rolf
--
sumpsi - posui - clusi