Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][HTML]Rezerwacja terminów
Forum PHP.pl > Forum > Przedszkole
hiszpaniec
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ś?
tehaha
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
hiszpaniec
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.