Tom: Datensatz vor dem speichern auf änderung vergleichen!

Beitrag lesen

Hello,

Nein, das kann er nicht. Relevant ist doch nur die Änderung des Datensatzes in der Tabelle auf dem Server. Und ob der zwischenzeitlich geändert wurde, kann der Client nicht feststellen.

Also kann ich nicht z.B. per Ajax beim Server anfragen ob der Datensatz noch der gleiche ist?

Es fragt sich, zu welchem Zweck du das erfragen willst. Wenn Du den Datensatz ändern willst, ist es egal, ob der Request per AJAX oder per normalem stateless Post übermittelt wird. Wichtig ist nur, ob der Datensatz geändert wurde, seitdem der Client ihn das letzte Mal gelesen hat. Und das geht nur auf dem Server _direkt__während__des__Änderungsversuches_. Dazu muss aber entweder das DBMS einen Conflict-Zähler bereitestellen (bTrieve tut das), oder aber ind Datenmodell und die Abfragen muss einer eingebaut werden.

Wenn relevant ist, dass der Datensatz von mehreren Stellen geändert werden kann, muss der OP das erwähnen. Solange aber das keine ausdrückliche Bedingung ist, steht für mich fest, dass eine Änderung nur von einem Rechner aus möglich ist.

Das ist sogar von einer einzigen "Stelle" aus schon relevant.

Und an die Fehlermöglichkeit wird der OP garantiert genausowenig gedacht haben, wie Millionen von anderen Web-Applikations-Entwicklern. Ich halte es daher für wichtig, darauf hinzuweisen.

Im braucht man also nur einen Counter einzubauen, diesen beim Holen der Daten mit auszulesen und z.B. als Hash mit an den Client zu liefern. Beim Posten der geänderten Daten sendet der Client diesen Hashwert mit zurück zum Server.

Die Änderung findet dann mit einem

Update tabelle
    set
      spalte = $spalte,
      ... ,
      counter = counter + 1
    where id = $id
      and hash(counter) = $hash;

statt.

Bitte aber Escaping und Quotierung der Variablen nicht vergessen, wo sie notwendig sind!

Sollte der Counter zwischendurch bereits erhöht worden sein, findet kein Update statt.

Oder man speichert id und counter gleich in der Session unter einem Ramdom-Wert ab, den man dann mitsendet.

Die Meldung für den Client könnte im Fehlfalle dann lauten: "Die gewünschte Änderung konnte nicht durchgeführt werden. Dies kann daran liegen, dass der DS inzwischen anderweitig gelöscht oder geändert wurde."

Und dann kann/muss der Satz neu ausgelesen werden.

Ob man dem Client die Wunschdaten von eben in einem separaten Bereich (Fenster, DIV, Popup) nochmal vorlegt zum Vergleich und/oder Copy und Paste, das ist dem Programmplaner überlassen.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de