Fahrtenbuch genial!
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 26.11.2006, 13:54   #1
TP-Insider
 
Benutzerbild von dieter99
 
Registriert seit: Dec 2001
Ort: Oberfranken
dieter99 ist auf einem guten Weg

Datensätze dürfen nicht gleichzeitig bearbeitet werden


Hallo,
wenn der Inhalt einer Webseite über ein Formular geändert werden kann, wie kann ich dann verhindern das 2 Benutzer die Seite gleichzeitig bearbeiten?
Das Formular kann nur aufgerufen werden wenn sich der User in das System eingeloggt hat. Ich könnte beim Aufruf des Formulars einen Eintrag in der mysql Datenbank machen damit der 2. User "merkt" das das Formular gerade in Bearbeitung ist. Doch wie erkenne ich das der 1. User das Formular nicht mehr bearbeitet wenn er das Formular nicht ordnungsgemäß verlassen hat?
Ich könnte den "Vermerk" in der Datenbank ("der 1. User bearbeitet gerade das Formular") mit einem Zeitstempel versehen der immer nur 5 Minuten gültig ist. Doch in diesen Fall muss der 2. User immer diese 5 Minuten warten bis er den Zugriff bekommt obwohl der 1. User das Formular bereits nach 10 Sekunden verlassen hat...

Wer kennt einen besseren Lösungsansatz?
dieter99 ist offline   Mit Zitat antworten


Alt 26.11.2006, 14:16   #2
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Vllt. hilft Dir das hier?

Siehe 2. Code-Beispiel von steadyguy
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 26.11.2006, 17:28   #3
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Ich würde es genau so machen, wie Du es dir bereits überlegt hast (bzw. hab es auch schonmal so gemacht). Ich kenne keine andere/bessere Lösung...das ist eben ein Problem, das die Statuslosigkeit von HTTP mit sich bringt.

Achja, eine Verbesserungsmöglichkeit gibts noch, die hatte ich bei meiner Lösung auch eingebaut:

Um

1. )
sicher zu stellen, dass das Locking auch tatsächlich für die gesamte Bearbeitungszeit des ersten Benutzers erhalten bleibt (sprich, die Lockingzeit muss mindestens so lang sein, wie der User wirklich das Formular bearbeitet. Eine pauschale, statisch gecodete Zeit ist deshalb nie 100%ig sicher, weil Du ja nicht weißt, wie lange jemand braucht) und

2.)
dabei die Überlappungszeit (erster User bearbeitet nicht mehr, zweiter darf aber noch nicht) trotzdem noch möglichst kurz zu halten,


kannst Du auf der Formularseite mittels unsichtbarem Iframe oder <achtung-trendy>AJAX</achtung-trendy> (wobei...vielleicht wirklich mal eine sinnvolle Anwendung dafür) mit einer gewissen Frequenz automatisch eine "User bearbeitet noch"-Nachricht an den Server schicken, der dann jedes mal den Locking-Timestamp aktualisiert. Dank des häufigen Updates kannst Du die Pufferzeit dann fast beliebig kurz halten. Sie muss nur ein bisschen länger als die Update-Frequenz sein. Je nach Gefragtheit des Formulars sind 20 Sekunden bis 1 Minute vielleicht gut gewählt.

Gruß,

Seb

Geändert von seb (26.11.2006 um 17:30 Uhr).
seb ist offline   Mit Zitat antworten
Alt 28.11.2006, 14:03   #4
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Wenn Du in den Datensätzen einen Timestamp der letzten Änderung hast, kannst Du diesen nach Einlesen speichern.
Kommt er nun zum Absenden und Verarbeiten der Eingabe, prüfst Du durch erneutes Einlesen, ob der Timestamp noch gleich.
Wenn ja: alles ist ok, verarbeite die Eingabe!

Wenn nein: Fehler-Meldung dass die Daten zwischenzeitlich geändert wurden und die neuen Daten als Vorgabe ins Formular stellen. So muss der zweite Nutzer nicht unnötig lange warten.
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 04.12.2006, 15:16   #5
TP-Member
 
Benutzerbild von JoSsiF
 
Registriert seit: Dec 2006
Ort: Sachsen
JoSsiF ist auf einem guten Weg
Hallo!

Bin ebenfalls gerade mit der gleichen Problematik beschäftigt und beim Recherchieren auf diesen Thread gestoßen


Zitat:
Zitat von 321
Wenn Du in den Datensätzen einen Timestamp der letzten Änderung hast, kannst Du diesen nach Einlesen speichern.
Kommt er nun zum Absenden und Verarbeiten der Eingabe, prüfst Du durch erneutes Einlesen, ob der Timestamp noch gleich.
Wenn ja: alles ist ok, verarbeite die Eingabe!

Wenn nein: Fehler-Meldung dass die Daten zwischenzeitlich geändert wurden und die neuen Daten als Vorgabe ins Formular stellen. So muss der zweite Nutzer nicht unnötig lange warten.

Ich halte diese Variante auch für gängig und weit verbreitet. Dennoch ist mir eine andere Idee gekommen, die ich hier einfach mal zur Diskussion stellen möchte:

Es wurde bereits das Problem beschrieben, dass der Nutzer in vielen Fällen wohl das Formular "unkontrolliert" (d.h. also, dass er NICHT über 'Speichern' oder 'Abbrechen' ...wie auch immer die Buttons heißen) verlassen könnte. Um diese Situationen abzufangen, verwende ich eine Art Filter, der bei jedem Request durchläuft.

Was tut der Filter?

Wenn ein Nutzer einen Datensatz per Edit-Formular bearbeitet, wird schon beim Betreten des Formulars eine Session-Variable mit der ID des Datensatzes und gleichzeitig ein Flag in der Datenbank gesetzt, um den Datensatz als "in Benutzung" zu kennzeichnen.
Der Filter prüft nun bei jedem Request das Vorhandensein der Session-Variable. Ist sie gesetzt, wird IN JEDEM FALL der Datensatz per Flag in der DB wieder freigegeben (es ist sehr wahrscheinlich, dass diese Aktion folgerichtig ist, da der Nutzer das Formular entweder speichert, abbricht oder unkontrolliert verlässt; der andere Fall würde nur eintreten, wenn der Nutzer im Browser "Aktualisieren" drückt).
Ist die Session-Variable nicht vorhanden, passiert rein gar nichts. Somit dürfte diese Lösung auch vergleichsweise schnell sein.

Den Vorteil gegenüber der bereits geposteten Lösung sehe ich darin, dass Datensätze von vornherein als "In Bearbeitung" gekennzeichnet werden können. Das macht bei größeren Formularen mit umfangreichen Eingaben durchaus Sinn: denn wenn der Nutzer mühevoll seine Eingaben gemacht hat und dann mit einer Meldung á la "Eintrag wurde modifiziert" beglückt wird (samt aktualisierter Form-Felder), wird seine Laune sicher nicht besser davon

Soweit die vereinfachte Erklärung dieses Konzepts, was sicherlich an einigen Stellen verfeinert werden kann.

Mich würde eure Meinung dazu interessieren. Seht ihr gravierende Schwachstellen?

Vielen Dank fürs Lesen

JoSsiF
JoSsiF ist offline   Mit Zitat antworten
Alt 07.12.2006, 00:49   #6
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Ja, hast Recht, meine Lösung hat Schwächen!
Ich machte das so in anderen (nicht Web) Umgebungen, wo unkontrollieres Abbrechen nicht möglich war.
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 07.12.2006, 01:08   #7
TP-Member
 
Benutzerbild von JoSsiF
 
Registriert seit: Dec 2006
Ort: Sachsen
JoSsiF ist auf einem guten Weg
Zitat:
Zitat von 321
Ja, hast Recht, meine Lösung hat Schwächen!
Ich machte das so in anderen (nicht Web) Umgebungen, wo unkontrollieres Abbrechen nicht möglich war.
Alright

Jede Lösung hat ihre Vor- und Nachteile. Von Schwächen muss man da gar nicht unbedingt reden

Ich hab noch gar nicht mitbekommen, wie das in diesem Forensystem gehandhabt wird. Von anderen Systemen kenne ich deine Lösung auch, nur mit einer Modifikation: Wird während des Verfassens eines Beitrages zwischenzeitlich ein neuer gepostet, so wird beim Submit eine entsprechende Meldung eingeblendet, und der neue Eintrag erscheint unter dem Textfeld in der Thread-History. Der eigene Text bleibt aber erhalten (ich würde regelmäßig ins Keyboard beißen wenn nicht! )

n8i
JoSsiF
__________________
// jsfnet.de
JoSsiF ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Datensätze dürfen nicht gleichzeitig bearbeitet werden Datensätze dürfen nicht gleichzeitig bearbeitet werden
« "Print" Ausgabe in Farbe und zentriert | benutzerdefinierte sortierung eines arrays aus mehreren mysql tabellen »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:52 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67