nam: Wunschliste

Hallo

Ich bastele soeben an einer Wunschliste herum. Besucher der Wesite können ihren Namen eintragen und einen Gegenstand, den sie schenken möchten, aus einer Drop-Down-Liste auswählen,auf absenden klicken und erhalten dann eine Bestätigung.

Serverseitig wird die Drop-Down-Liste aus den Einträgen aus einer SQLite-DB zusammengesetzt. "Schenkt" ein Besucher einen Gegenstand, wird sein Name in die DB eingetragen und der entsprechende Gegenstand wird bei künftigen Aufrufen nicht mehr aufgelistet.

Jetzt besteht die Gefahr, das zwei Personen unabhängig voneinander die Seite gleichzeitig öffnen. Die eine schenkt zuerst was, die zweite bekommt davon aber nichts mit und hat eine nicht aktuelle Drop-Down-Liste im Browser.

Dieses oder ähnliche Probleme dürften ja wohl häufig sein. Wie sieht die SOP in so einem Fall aus?

Danke und Gruss,
Mathias

  1. Hi,

    du stellst beim Eintragen fest, ob der Gegenstand schon "verschenkt" wurde und zeigst dem 2. oder 423. Benutzer (welcher zu spät kam) dasselbe Formular nochmals mit aktualisierten Daten an und einem Hinweis à la "Pech gehabt".

    Ciao, Frank

  2. Liebe(r) nam,

    das ist eine typische Race Condition. Deswegen müsstest Du einen locking-Mechanismus irgendwo haben (keine Ahnung ob das SQLite schon macht).

    Jedenfalls wird Dein Script nach dem Absenden der Daten prüfen müssen, ob bereits ein Eintrag diesem Schenkungsgegenstand zugeordnet wurde, um in diesem Falle eine aktualisierte Auswahl mit einer "Fehlermeldung" zurückzugeben.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  3. Hello,

    Dieses oder ähnliche Probleme dürften ja wohl häufig sein. Wie sieht die SOP in so einem Fall aus?

    echo "Pech gehabt, der Gegenstand (...) den Sie schenken wollten, war schon vergeben"

    "Bitte versuchen Sie es nochmal"

    :-)

    Oder was wolltest Du wissen?

    Update geschenke
         set schenker = sterilisiere(post(schenker))
         where geschenk = sterilisiere(post(geschenk)) and schenker = '' or schenker = NULL;

    get affected rows

    if ...

    (pseudocode)

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi

      Danke euch allen.
      Ich dachte, es gäbe vielleicht eine elegantere Lösung.

      Gruss,
      Mathias