Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapis do bazy - sprawdzenie czy rekord nie uległ zmianie, Sprawdzenie czy inny użytkownik nie zrobił update gdy pierwszy zapisu
okatse
post 29.11.2019, 09:03:13
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.11.2019

Ostrzeżenie: (0%)
-----


Witam
Problem dotyczy zapisywania do bazy. Gdy dwóch ludzi otworzy np: edycję produktu o ID =1. Oboje zobaczą ten samo formularz i te same dane w nim. Pierwszy poszedł na kawę a drugi w tym czasie zmodyfikował dane i zapisał do bazy. Pierwszy wraca z kawy patrzy na formularz ale widzi w nim stare dane (bo ktoś w tym czasie je już poprawił) - nieświadomy niczego wprowadza swoje dane i zapisuje. W momencie zapisu powinien dostać info że dane w formularzu podczas jego nie obecności zostały zmienione.
Zna ktoś jakiś sposób na to? Blokowanie rekordu na czas edycji w formularzu nie wchodź i w grę.
Go to the top of the page
+Quote Post
kapslokk
post 29.11.2019, 09:12:43
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Wstaw do tabeli pole "modifiedAt" z czasem ostatniej modyfikacji, przy pobieraniu rekordu do edycji zapiszesz sobie ten czas, później przy próbie zapisu rekordu najpierw porównujesz czy zapisana data jest taka sama jak w bazie, jeśli nie to wywalasz informację, że dane się zmieniły.

Ten post edytował kapslokk 29.11.2019, 09:25:44
Go to the top of the page
+Quote Post
Tomplus
post 29.11.2019, 15:12:43
Post #3





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Możesz sprawdzać różnicę danych sprawdzać checksum rekordów. Albo wchodząc na dokument blokować do niego dostęp, który będzie odblokowany po pewnym czasie, lub po kliknięciu czynności.
Wtedy jak ktoś inny wejdzie na dokument będzie tylko do odczytu.
Go to the top of the page
+Quote Post
Pyton_000
post 15.12.2019, 20:24:14
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Jeśli masz pole typu `updatedAt` to je pobierasz. Potem przy zapisywaniu robisz tak:

UPDATE table SET col1 = val1, updatedAt = NOW()
WHERE id = 1 AND updatedAt = WartośćPobranaWcześniej.

Jesli zwórci Ci to zapytanie 1 to znaczy że poszło ok. Inaczej klops.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 18:28