ein datensatz, mehrere user



  • hey

    ich habe eine seite (php, javascript, ajax) auf der ich viele datensätze anzeige, die verschiedene informationen enthalten. nun sollen einige nutzer auf diese liste der datensätze zugreifen, sich einen aussuchen können und diesen dann bearbeiten. damit es nicht zu fehlern kommt, würde ich das ganze gerne so absichern, dass jeweils nur ein user einen datensatz bearbeiten kann. ein anderer user, der diesen datensatz bearbeiten wollen würde, würde daraufhin nur eine meldung sehen, dass der datensatz momentan gesperrt ist oder sowas in der art.

    wie mache ich sowas am besten?

    ich könnte ja beim aufruf des datensatzes einen vermerk in eine datenbank schreiben, die den datensatz als gesperrt markiert, bis der user auf speichern oder zurück klickt. was passiert aber wenn der user den browser schließt oder eine andere seite aufruft? was passiert dann mit meinem vermerk in der datenbank?

    danke schon einmal im voraus!



  • Geh den umgekehrten Weg!
    Soll heißen: Wenn ein User sich einen Datensatz anzeigen lässt und diesen bearbeitet, dann auf "Speichern" klickt, wird geprüft, ob sich der Datensatz seitdem der User ihn geladen hat, bereits verändert hat. Falls ja, war in der Zwischenzeit jemand anderes schreibend an den Daten am werkeln. Dann zeigst du die neuen Daten an und bittest den User nochmals um Bestätigung, ob trotzdem geschrieben werden soll.

    Ist aber auch nicht das Gelbe vom Ei ...



  • ja, die idee hatte ich auch, aber wie du schon sagst, ists auch nicht das gelbe vom ei - zumal zwei user am datensatz gearbeitet hätten und dann noch arbeitszeit auf das "zusammenfügen"/"entscheiden für eine bearbeitung" kommen würde.

    hmmm.. sonst noch wer ne idee? da muss es doch einen standardweg geben.. so ein mist..



  • ich glaub, ich habs: beim datensatzaufruf setze ich einen gesperrt vermerk und die aktuelle zeit. solange der bearbeitende user die seite auf hat, wird zB alle 5 min per ajax die aktuelle zeit gesendet. passiert das nicht, weil zB die seite geändert wurde ohne das "offiziell" über speichern oder zurück gemacht zu haben, wird der datensatz beim nächsten aufruf eines users wieder freigegeben für den aufrufenden, da die bearbeitungszeit abgelaufen ist... klingt ein wenig konfus, funktioniert aber für mich erstmal. ..wobei, wenn jemand sonst noch eine gute idee hat, wie mans gut machen kann, immer her damit.





  • hey

    hab vielen dank für den link, ich hab schon ein paar absätze gelesen und es ist bisher sehr informativ.

    mein problem habe ich gestern noch gelöst, wie ich heute weiß, mit der pessimistischen sperre 🙂

    danke nochmal an alle beteiligten!



  • pommes schrieb:

    ich glaub, ich habs: beim datensatzaufruf setze ich einen gesperrt vermerk und die aktuelle zeit. solange der bearbeitende user die seite auf hat, wird zB alle 5 min per ajax die aktuelle zeit gesendet. passiert das nicht, weil zB die seite geändert wurde ohne das "offiziell" über speichern oder zurück gemacht zu haben, wird der datensatz beim nächsten aufruf eines users wieder freigegeben für den aufrufenden, da die bearbeitungszeit abgelaufen ist... klingt ein wenig konfus, funktioniert aber für mich erstmal. ..wobei, wenn jemand sonst noch eine gute idee hat, wie mans gut machen kann, immer her damit.

    Ich wuerde den Timeout je nach Bedarf hoeher setzen, ab wann er freigegeben wird, ansonsten ist das die Vorgehensweise, die mir bekannt ist, die meines erachtens auch am haeufigsten gehandhabt wird und sich im Prinzip auch durchgesetzt hat. Ein Hinweis an der Stelle: Setze zwei Felder in die Tabelle der zu bearbeitenden Datensaetze: edit_user und edit_timestamp. edit_user ist dann ein Fremdschluessel auf die User-ID.



  • der timeout liegt bei mir bei 5 minuten, da die zu bearbeitenden datensätze relativ klein sind. wichtig ist hier, dass alle datensätze so schnell wie möglich abgearbeitet werden, so dass wenn userA einen datensatz bearbeitet und dann zB den browser schließt und demnach nicht mehr regelmäßig meldet, dass er noch editiert, der datensatz möglichst schnell wieder in der liste der zu bearbeitenden auftaucht. (junge junge, lange sätze wollte ich mir eigentlich abgewöhnen)
    die beiden felder habe ich auch gesetzt, edit_user braucht man nicht unbedingt, aber es ist sinnvoll, falls userA die seite mit dem datensatz verlässt und dann über die todo liste innerhalb der sperrzeit wieder reinwill - in dem fall weiß man, dass er der bearbeiter ist und so darf er im gegensatz zu anderen usern diesen datensatz bearbeiten/sehen. ...falls es die nachwelt interessiert. danke nochmal für den hinweis!


Anmelden zum Antworten