Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rezerwacja biletów
bubx2k
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 17.11.2014

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


Witam,
mam w zamiarach zaprogramować system rezerwacji biletów na spektakle. Nie zastanawiałem się jeszcze nad strukturą bazy, aczkolwiek mam małą zagwozdkę. Mianowicie, załóżmy, że na pewien spektakl jest dostępnych 100 biletów. Ludzie rezerwują rezerwują, aż w końcu dochodzimy do stanu 3 wolnych miejsc.

Teraz załóżmy, że mamy dwóch uczestników scenariusza - A oraz B.

A - rozpoczyna proces rezerwacji trzech biletów.
B - rozpoczyna proces rezerwacji trzech biletów.

A - jest już na etapie kiedy wystarczy kliknąć jeden przycisk aby potwierdzić rejestrację i dokonać płatności, lecz w między czasie B okazał się szybszy i zdąrzył już zapłacić za bilety - co w gruncie rzeczy wskazuje na stan biletów równy 0.

I teraz co? Zostajemy ze stanem biletów o wartości ujemnej.

Czy jest jakiś sposób aby zapobiec wyżej przedstawionemu?
Pomyślałem nad odejmowaniem już wcześniej ilości rezerwowanych biletów - przed zakończeniem procesu. Czy ma to sens?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Piotrroger
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 18.01.2007

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


transakcje smile.gif
Go to the top of the page
+Quote Post
batman
post
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Na samej bazie nie rozwiążesz tego problemu. Możesz to zrobić w taki sposób:
- osoba A rozpoczyna proces rezerwacji biletów
- tworzysz nową sesję z czasem ważności, np. 15 minut
- jeśli w tym czasie osoba A nie sfinalizuje transakcji, usuwasz sesję, użytkownikowi A wyświetlasz komunikat o wygaśnięciu sesji
- bilety wracają do puli

W takim przypadku osoba B nie będzie w stanie kupić biletów tak długo, jak aktywna będzie sesja osoby A. Ale przynajmniej masz pewność, że nie wystąpi opisana przez Ciebie sytuacja.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
aniolekx
post
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


aby wyjąć bilety z puli musisz:
za pomocą transakcji blokujesz tabele aby inna sesja jej nie mogla przeczytać
sprawdzasz czy są bilety,
update tabeli - ściągasz bilety do sesji
kończysz transakcje,

a później to co napisał batman, bilety są w sesji i albo zostają sprzedane albo wracają do puli
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 Aktualny czas: 22.08.2025 - 04:42