Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL][HTML]Rezerwacja terminów, problem z bazą danych i sprawdzaniem zarezerwowanych terminów
hiszpaniec
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 6.01.2007

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


Witam, zamierzam napisać skrypt rezerwacji terminów z takimi funkcjami jak:
1)wybranie miesiąca/dnia i zatwierdzenie
2)wypisanie wolnych godzin w formularzu
3)wybranie ile ma trwać rezerwacja,
4)sprawdzenie czy nie koliduje z innymi rezerwacjami oraz uwzględnienie tego aby pomiędzy każdą rezerwacją było 20 minut na przygotowanie się i 20 minut po rezerwacji na posprzątanie.
Jak mam rozwiązać takie coś?

Ten post edytował hiszpaniec 26.05.2010, 13:56:49
Go to the top of the page
+Quote Post
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


hej możesz to zrobić np. tak:

tabela:
course_id | course_date | start_time | end_time | reserved_end_time (end_time + 20min)

a w niej data, godzina rozpoczęcia, godzina zakończenia i godzina zakończenia +20min ( bo w tym czasie inny termin nie może się zacząć)

i teraz przy próbie dodania nowego terminu trzeba uwzględnić 3 przypadki:
1. Czas startu nowego terminu nie może znajdować się między startem a zarezerwowanym końcem innego terminu
2. Zarezerwowany koniec(czyli koniec +20min) nowego terminu nie może znajdować się między startem a zarezerwowanym końcem innego terminu
3. nowy termin nie może zaczynać się i kończyć w czasie innego terminu

czyli, sprawdzasz czy któryś z tych przypadków jest spełniony dla wybranej daty, jeżeli poniższe zapytanie zwróci wartość większą niż 0, to znaczy że ten termin kolidowałby z innym:

  1. $new_start_time; // godzina np. 15:30
  2. $new_end_time; // godzina np. 15:30 !!!! tutaj wybrana godzina + doliczone 20min przerwy
  3. $new_course_date; // data
  4.  
  5. $sql = "SELECT course_id FROM courses WHERE course_date = $new_course_date AND (($new_start_time > start_time AND $new_start_time < reserved_end_time) OR ($new_end_time > start_time AND $new_end_time < reserved_end_time) OR( $new_start_time < start_time AND $new_end_time > end_time))";


oczywiście warto by jeszcze dodać jakiś kalendarzyk z zamalowanymi zajętymi terminami dla zwiększenia usablity
Go to the top of the page
+Quote Post
hiszpaniec
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 6.01.2007

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


Wielkie dzięki za pomoc, jednakże w 1 warunku trzeba było dodać >= oraz <= .

  1. SELECT count(*) FROM reservations WHERE date = $arguments[0] AND
  2. (($x > startTime AND $x < endTime+$distance) OR ($massageLength+$x+$distance > startTime AND $massageLength+$x+$distance < endTime+$distance) OR ( $x <= startTime AND $massageLength+$x+$distance >= endTime))


$distance to odstęp między masażami pobierany z bazy danych, endTime i startTime to czasy już zarezerwowanych terminów
$massageLength+$x+$distance to długość masażu który wybraliśmy + $x (to jest wygenerowana w pętli godzina poprzez mktime od godziny otwarcia do zamknięcia)

zaś cała pętla iterująca $x:
  1. for ($x = $startTime;$x<=$endTime-$massageLength;$x+=$step) {

tak aby wyświetlały się tylko godziny do zamknięcia - długość masażu.

Piszę, bo może się komuś przydać i jeszcze raz dzięki za pomoc.
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 - 08:37