Wpis z mikrobloga

Robię stronę w Laravel, gdzie można dokonywać rezerwacji terminów (formularz z chechbox'ami), po kliknięciu rezerwuj przenosi do strony gdzie wyświetlona jest lista wybranych rezerwacji. Tam mam przyciski do zatwierdzenia rezerwacji lub jej anulowania.

Nie mam pomysłu w jaki sposób powinienem przekazywać ID wybranych terminów do kontrolera, który zapisze to w bazie danych.
Po raz kolejny przesyłać je formularzem?
Zapisać te ID do sesji flash?
Czy może w trakcie dokonania rezerwacji tworzyć tymczasową tabelę w bazie danych i w momencie potwierdzenia rezerwacji kasować tymczasową i zapisywać to w docelowej tabeli? Dzięki temu w między czasie nikt inny by nie mógł rezerwować terminu, który jest aktualnie 'w oczekiwaniu' w tymczasowej tabeli rezerwacji.

Może należy zastosować transakcje?
Jak się rozwiązuje taką kwestę najczęściej?

#naukaprogramowania #php #webdev #laravel #bazydanych
  • 10
@vault1337: W sensie, że w kontrolerze wywołam odpowiedni model, który to w bazie zapisze.

@normanos: W jaki sposób zabezpiecza się rezerwację 'w trakcie' bez tymczasowej tabeli? Bo ktoś inny może w tym samym czasie wybrać ten sam termin i szybciej go potwierdzić. Nie powinno być to możliwe do momentu, gdy pierwsza osoba zatwierdzi lub anuluje.
@jasieq91: to jest kwestia do przemyślenia, bo pamiętaj, że to ma być przyjemne dla 99% zwykłych użytkowników, więc nie pozwól, by przez ten 1% intruzów zepsuć usability. Dobrym sposobem są blokady czasowe na IP, bo pamiętaj, że intruza sesje czy inne ciasteczka nieobowiązują.
@jasieq91: Prześlij ponownie formularzem.

Po co Ci mieszać w sesji/ciastkach? Na drugim etapie masz wszystkie potrzebne informacje – potwierdzenie jest dla użytkownika (jako upewnienie się), a nie dla serwera (jako zabezpieczenie).

Klika „zaniechaj”? Olewasz.
Klika „akceptuj”? Tym razem faktycznie zapisujesz te dane, zamiast tylko przekierować na kolejną stronę.

To jest najprostsza opcja.

Chyba, że chcesz, aby użytkownik miał do tego dostęp jak zamknie okno przeglądarki – wtedy mechanizm zapisu jest niezbędny