Willkommen in der Webstatt Zum Webstatt Blog und Stories
Kevz am 26.05.06 22:47

Greetz zusammen,
hab nun seit einigen Tage ein Problem bzw. schon seit längerer Zeit wofür ich ned wirklich eine direkte Lösung finde. Und zwar handelt es sich bei dem ganzen um diese Funktion.

Um jetzt auf das Problem zu kommen, die Funktion habe ich nun so beschränkt das wenn man die eigenen Session überschreibt dies zumindest unterdrückt wird. Danke, $usedatabackup. Denn Dort habe ich die gleiche Session noch einmal gespeichert um ein Backup zu machen, jetzt besteht aber das Problem. Das wenn jemand anders mir einen Wert überschreibt / ändert, das dieser nicht erhalten bleibt.

Hier ein bsp:
User A ist in der Bank und holt gerade Geld ab. User B ist ebenfalls in der Bank und überweist im gleichen Moment Geld in dem User A sein Geld bekommt. Fazit, User A bekommt nur das Geld was er gerade bekommen hat und nicht noch das Geld was ihn User B überwiesen hat.

Habs bereits Versucht via. MySQL zu versuchen, aber nya mehr oder weniger Fehlgeschlagen. Ich wollt das ganze eig. so machen, das die Werte die geändert werden in der Datenbank gespeichert werden, da dies aber zu aufwendig ist für jedes Script zu machen, habe ich mir erhofft das ihr evtl. eine andere Lösung dazu habt, weil das wäre dann wirklich meine aller letzte Lösung jedes Script anzupassen und das ist wohl viel zu aufwendig...


Mfg, Kevz.

netcup.de Warum gibt es hier Werbung?
Michael Michael am 26.05.06 23:03

Verstehe ich dich richtig: Dein Problem ist, dass der Betrag den User B an A sendet quasi verloren geht, da User B seine Sessiondaten in dem Moment in die Datenbank schreibt?

Wenn ja, kannst du es einfach nicht vollkommen verhindern - dafür wären Transaktionen angebracht. Möglicherweise hilft es ja, direkt vor dem Speichern (also Überschreiben) des neuen Kontostandes zu überprüfen, ob sich der Kontostand in der Zeit geändert hat. Bei einer Änderung müsste der User wieder zurück geleitet werden.

Michael

Kevz am 26.05.06 23:13

Yep, genau so mein ich es. Das prob ist, es sind ja mehrere Session Elemente, d.h. wirds Problematisch bei jedem einzelnt zurückzuschicken. Ich hatte mir überlegt die Werte in der DB zu speichern, falls eine Änderung vor trifft.

Sprich für jedes Session Element ein Eintrag und danach wird dann ggf. das ganze geändert. Nur genau das ist mein Problem ich finde keine Lösung direkt für alle Elemente... Für einzelne ist ja kein Thema.

Kevz am 27.05.06 12:49

Sry für Doppelpost.
Mir kam grad noch ne andere Idee, wie wäre es denn wenn man die Tabellen auf InnoDB stellt und dann mit commit & co. die SQL- Querys sendet, dann würde es doch das ganze beheben oder ned?

Michael Michael am 27.05.06 13:04

Jaein. Theoretisch ist das der richtige Weg, ohne Abstriche. Nun das große ABER: du musst die Logik natürlich dennoch auch in deinem Programm abbilden - sprich eine Überprüfung ob eine etwaige Geldüberweisung funktioniert hat oder ob die Tabelle gesperrt war.
In jedem Fall kannst du mit Transaktionen deinen Datensatz valide halten

Kevz am 27.05.06 13:28

Mhhh, ok jetzt hab ich wenigstens ein Einsatz. Wie ich es machen kann, dennoch wirds wohl eine herausforderung in der hinsicht bleiben. Nya mehr als versuchen kann man auch ned ^^

Michael Michael am 27.05.06 13:29

Im Grunde lernt man auch genau daran ;)

Kevz am 27.05.06 15:19

In dem man sich damit Quält wa?*lach*
Nya, komm ned wirklich voran, ich such mehr nach einer zwischenspeicherung um alles dann zu checken ist denke ich mal wesentlich sicherer.

€dit:
ahh, hast mich grad auf Idee gebracht.
Wie wäre es denn wenn ich die Werte überprüfe ob sie sich verändert haben und dann den Verändert werd dann in die DB schreibe und danach erst den rest ändern tu. So könnt ich doch eig. auch sicher gehen oder ned?

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt