Autor Zpráva
ash
Profil
Ako ošetriť súčasnú editáciu riadku tabuľky dvoma užívateľmi?

Situácia:

1. Užívateľ SlowFox si otvorí formulár pre editáciu riadku tabuľky.
2. Užívateľ SpeedyGonzales si otvorí formulár pre editáciu rovnakého riadku tabuľky. Zmení niektoré polia a odošle.
3. Užívateľ SlowFox zmení niektoré polia a odošle.

výsledok: Zmeny, ktoré urobil SpeedyGonzales sú stratené.

Uvažoval som, že pred zobrazením formulára spojím všetky polia do stringu a zapamatám ich hash (asi cez md5?).
Po odoslaní formulára, pred zápisom upravených hodnôt zamknem tabulku. Vypočítam hash aktuálnych hodnôt a porovnám s pôvodným.

Ak sa rovnajú. je všetko OK, zapíšem data a odomknem tabulku.
Ak nie, odomknem tabulku, oznámim SlowFoxovi, že medzitým niekto iný zmenil data, a zobrazím formulár s aktuálnym stavom.

Má tento postup nejaké slabiny?
Ako sa to rieši štandardne?
error414
Profil
ash
Dej tam priznak otevreno zavreno, pokud se nekdo bude pokouset otevrit uz editovany nepusti ho to.

Ma to jednu vadu ze pokud nekdo utevre soubor a zavre prohlizec tak uz ho neotevre nikdo.
ash
Profil
Ma to jednu vadu ze pokud nekdo utevre soubor a zavre prohlizec tak uz ho neotevre nikdo.

Jednak to, okrem toho užívatelia sú schopní otvoriť si formulár a odísť trebárs na obed. A riadok celý čas zostane blokovaný.
Kajman_
Profil *
Většinou to dělám trošku jinak... ukládám časový příznak a uživatele při poslední změně. Tyhle hodnoty dám jako hidden input a když nesouhlasí s db (někdo stačil údaje upravit) nepovolým uložení - tedy výsledek stejný - SpeedyGonzales musí znovu upravit nejnovější verzi. Je to však v projektech, kde je malá šance na konflikty.
error414
Profil
Kajman_
Zrovna jsem to resil na svem blogu, ne ze by to bylo potreba ale jako zajimavost.

Jak jsem uvedl vise tak takhle to ma vyresene mambo, ja jsem to vyresil stejne jen stim rozdilem ze se tabulka nezamkne ale jen pri pokusu o editaci uz otevreneho dokumentu se objevi varovani, ze clanek je editovan a ze to nmuze spusobit nekonzistenci dat a ............
Toto téma je uzamčeno. Odpověď nelze zaslat.