Mailinglisten-Archive |
A. Narres wrote:
>1. Ist es sinnvoll, nicht nur den Warenbestand, sondern auch den
>Warenkorbinhalt in (einer) MySQL-Tabelle(n) zu speichern?
>
Mach es am besten, wie du denkst. Ich habe mehrere Shops gecoded, aber
die meiner Meinung nach sinnvollste Lösung wäre es, die Daten in einer
Session zu speichern, wenn der Warenkorb nach Verlassen der Seite
sowieso geleert werden soll.
Beispiel: Du machst dir ne Variable $warenkorb, die du mit
session_register('warenkorb') in der Session abspeicherst. Die Variable
ist eigentlich ein Array mit der Produkt-Nummer als Schlüssen, z.B.
$warenkorb[12345] oder $warenkorb[22222]. Wenn du willst, kannst du
sogar ne Produktbeschreibung im Array speichern, also z.B.
$warenkorb[12345]['name'] = 'Testprodukt' ,dann musst du nicht jedes Mal
die Datenbank bemühen.
Bei nem kleinen Shop sollte es keine Probleme geben, bei nem größeren
Projekt könnte es andere Lösungen geben, die performanter sind. Aber der
Vorteil: Du kannst leicht ein Produkt mit unset($warenkorb[$produkt_id])
löschen und sobald der Benutzer die Seite verlässt, wird die Session
automatisch gelöscht.
>2. Wenn ja, sollte ich zu diesem Zweck eine Tabelle anlegen, in der
>der Warenkorbinhalt aller Benutzer gespeichert wird und anhand ihrer
>Session-Id bzw. Warenkorb-Id abgerufen werden kann oder ist es
>sinnvoller für jeden Besucher eine eigene Tabelle anzulegen, deren
>Name aus der Session-Id bzw. Warenkorb-id besteht? (Oder gibt es eine
>weitere, sinnvollere Lösung?)
>
Neue Tabelle für jeden Benutzer- ja nicht!!! Das wird derart
unübersichtlich und widerspricht der Normalisierung von Datenbanken
(mehr zum Thema: www.little-idiot.de/mysql).
Lege eine Tabelle an, in der du alle Daten abspeicherst - die User
findest du anhand ihrer Session- oder Warenkorb-ID wieder... oder du
machst es mit Sessions.
>3. Unabhängig davon, ob nun eine gemeinsame Warenkorb-Tabelle oder für
>jeden Besucher eine eigene Warenkorb-Tabelle angelegt wird, die Daten
>sollen natürlich gelöscht werden, wenn der Besucher seine Bestellung
>vershcickt hat - aber auch wenn er die Seite verläßt. Wie ich
>letzteres am besten realisieren kann, ist mir unklar. Schließlich kann
>ich ja nicht feststellen, wenn ein Besucher die Seiten verläßt, ohne
>zuvor seinen Warenkorb zu löschen.
>
Setze einen Timestamp in die Datenbank rein. Und wenn ein Benutzer eine
gewisse Zeit (z.B. 1 Stunde) nichts mehr getan hat, kannst du die Daten
löschen. Dann sollte er die Seite verlassen haben. Du kannst das
realisieren, indem du bei jedem Besucher prüfst, ob ein vorheriger
Besucher Produkte im Warenkorb "vergessen" hat, also das festgesetzte
Timelimit überschritten hat, wenn ja, löschst du es einfach.
Hoffe, geholfen zu haben.
Gruss,
Ithamar
php::bar PHP Wiki - Listenarchive