Scooter: Online-Shop, Artikelanzahl steuern

Hi,

ich bin gerade dabei einen Online-Shop zu programmieren.

Das ganze mache ich mir PHP und MySQL.

Es gibt dort eine Artikeltabelle, die u.a. auch die Anzahl jeden Artikels speichert, also die Verfügbarkeit (im Lager z.B.)

Nun stell ich mir vor, das jemand ankommt und einen Artikel, der genau einmal vorhanden ist, in seinen Warenkorb/"Einkaufswagen" tut.

Genau, dann sollte doch eigentlich die Anzahl der Artikel um eins erniedrigt werden, hier also auf Null, damit nicht gleichtzeitig ein anderer Kunde auch dieses Produkt in seinen Warenkorb laden kann. (da dann 2 Produkte bestellt werden könnten, obwohl nur 1 vorhanden ist).

Wenn man dann seinen Warenkorb mit seinen gewünschten Artikeln gefüllt hat, gehts an die Kasse, sprich man klickt auf Bestellen und das ganze ist abgeschlossen.

Problem ist jetzt folgendes: Thereotisch könnte man sich den Warenkorb voll laden, aber damit nie zur Kasse gehen, sondern einfach das Browserfenster schließen, oder die Seite verlassen.
Die Anzahl der Produkte bleibt jedoch erniedrigt, obwohl sie gar nicht wirklich bestellt wurden.

Wie kann ich das verhindern, bzw. wie kann ich das rückgängig machen, d.h. wenn jemand IRGENDWIE nicht zu Kasse gelangt oder gelangen will, wie krieg ich dann die Artikel des "Einkaufswagens" der da "irgendwo in dem Shop" rumsteht, wieder zurück in die "Regale".

Gruß
Scooter

  1. Hallo,

    es ist nur so eine Idee, aber du könntest deine Datenbankstruktur etwas erweitern (Achtung, Inkonsistenzen wären hier tödlich). Wenn du mal im Archiv suchst haben schon oft Leute gefragt, wie man Online-Anzeigen für Foren etc. realisieren kann, so dass angezeigt wird wie viele Leute gerade online sind. Oft wird dabei dazu geraten eine Tabelle mit Timestamps der letzten User-Aktion zu versehen und z.B. anhand der Session zu indizieren. Nach der Session-Destroy-Zeit würden diese Einträge dann wieder automatisch gelöscht.
    Wenn du einen Artikel aus deiner Verfügbarkeitstabelle austragen würdest sobald er in den Warenkorb wandert und würdest ihn gleichzeitig in die Online-Anzeige (oder die Session) des zugehörigen Users speichern, dann wäre er erst einmal weg. In dem Moment wo der Kunde bezahlt, löscht du sie von dort.
    Verfällt hingegen die Session, dann musst du in deiner "online-tabelle" erkennen, dass der Kunde nicht mehr da ist, er aber noch Sachen in seinem Warenkorb hat und diese dann zurückschreiben.

    Ob dieses recht wacklige System allerdings den Programmieraufwand wert ist?? Wenn ich bei Media Markt frage ob etwas da ist während ein anderer Kunde das letzte Teil gerade zur Kasse trägt, dann erhalte ich auch ein Ja obwohl das Teil schon verkauft ist...

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  2. Hallo Scooter,

    vielleicht etwas umständlich, aber Du könntest doch eine Tabelle 'umlauf' anlegen. Dort trägst Du für jeden temporär entnommenen Artikel (Warenkorb) die SID des Entnehmers ein, z.B. so:

    Artikel_ID | SID
    -----------------
    1523012    | a098f09ds098098d9d92
    -----------------
    7595635    | c3498h3492048f757362
    ...

    und dann mußt Du jedes mal, wenn jemand einen Artikel entnehmen will abfragen, ob da nicht schon alle im Umlauf sind. Wenn einer bezahlt, werden seine Datensätze aus 'umlauf' gelöscht und die entsprechenden Artikel in der Bestandstabelle erniedrigt. Zum zurücklegen fällt mir nur ein timeout ein: wenn der Kunde nicht nach einer bestimmten Zeit irgendwo geklickt hat, werden seine Einträge in 'umlauf' gelöscht.

    Gruß, Andreas

  3. Hallo Scooter,

    Du wirst dieses Problem nicht wirklich lösen können. Ich hatte auch einmal dieses Problem. Bei mir habe ich es so gelöst, dass ein Kunde einen Artikel in den Warenkorb legt und die Bestellung abgibt.

    Es wird erst nach Bestellabgabe aus der Datenbank der Artikel entfernt.

    Ein zweiter Kunde - mit dem gleichen Artikel im Warenkorb, hineingelegt, bevor der erste Kunde bestellt hat, bestellt auch noch diesen Artikel. Erlaubt ist es, weil es für den Kunden frustrierend wäre, von einem anonymen Script gesagt zu bekommen, dass der gewünschte Artikel nun gerade weg ist. Da schreibe ich lieber eine persönliche Entschuldigung per E-Mail.

    Ein dritter Kunde kann den Artikel nicht mehr bestellen, da der dritte Kunde nach Bestellung des ersten Kunden und nach dem Austragen des Artikels aus der Datenbank diesen Artikel in den Warenkorb legen wollte. Der Artikel wird diesem Kunden als nicht verfügbar angezeigt.

    Vielleicht hilft es Dir ja weiter. Ich halte diese Lösung für die für alle Seiten günstigste Lösung.

    1. Hi,

      Naja, sicher irgendwie. Die anderen Poster hatten doch einige Vorschläge.

      Natürlich kann man dem Kunden persönlich eine Entschuldigungs-E-Mail schreiben, aber besser find ich es, wenn er gar nicht die Möglichkeit bekäme, einen Artikel in seinen Warenkorb zu laden, obwohl ein anderer ihn schon in seinem Korb hat.

      Gruß
      Scooter

  4. Hi Scooter!

    • bin selbst Scripter bei einem Onlineshop. Ob Du es glauben magst, oder nicht: Es lohnt den Aufwand in keinem Fall! Die Wahrscheinlichkeit, daß ein Artikle (Bestand 1) innerhalb nur 15 min (zu vermutender Zeitramen) doppelt abverkauft wird, ist nach meinen Erfahrungen denkbar gering (2 mal bis jetzt vorgekommen).

    Gruß aus Berlin!
    eddi