Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] sprawdzanie przedziałów czasowych
grzegorz_g
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 26.10.2004

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


posiadam stronę coś w rodzaju rezerawcji pokoi.

Mam też formularz a w nim 2 pola
  1. <input type="text" name="data_start" value="" />
  2. <select name="okres" id="okres" >
  3. <option value="1">1</option>
  4. <option value="6">6</option>
  5. <option value="12">12</option>
  6. <option value="18">18</option>
  7. <option value="24">24</option>


teraz jednak potrzebuje po wysłaniu formularza (a jaby się dało sprawdzić to nawet przed) czy pokój w tym czasie jest wolny

do bazy zapisuje datę w formie mktime

  1. <?php
  2. $datka=explode("-",$_POST['data_start']);
  3. $data_start=mktime(0,0,0,$datka[1],$datka[0],$datka[2]);
  4. $data_end=$data_start+(60*60*24*$okres);
  5. ?>


no i teraz jest problem jak sprawdzić czy ten okres wybrany przez usera nie jest już w bazie?

CZekam na sugestie, za które wielkie dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Pewnie i jest to wystarczające.
Wchodząc w szczegóły:
Założyłem, że więcej jest odczytów z tabeli niż operacji zapisu do niej.
Tabela rezerwacji przechowuje daty początku i końca, ale istnieją dwie dodatkowe tabele.
Kod
  bookings_calendar:
    _attributes:  { phpName: BookingEntry }
    id:
    apartment_id: { type: integer, required: true, foreignTable: apartments, foreignReference: id }
    order_id:     { type: integer, required: true, foreignTable: orders, foreignReference: id }
    date:         { type: date, required: true }
    state:        { type: tinyint, required: true, default: 1 }
    type:         { type: tinyint, required: true, default: 0 }
    events:       { type: integer, default: NULL, foreignTable: bookings_events, foreignReference: id }
    skip:         { type: boolean, default: false }
    
  temp_bookings_calendar:
    _attributes:  { phpName: TempBookingEntry }
    id:
    apartment_id: { type: integer, required: true, foreignTable: apartments, foreignReference: id }
    date:         { type: date, required: true }
    state:        { type: tinyint, required: true, default: 1 }
    session_id:  { type: varchar, size: 128, required: true }
    expire_date:  { type: timestamp }


Służą one do sprawdzania dostępności i do rysowania kalendarza. Tabela temp_booking_calendar przechwuje tylko wstępne rezerwacje - klient zaznacza zakres dat, wypełnia formularz i otrzymuje stronę z prośbą o potwierdzenie. Jeśli potwierdzi (kliknie "tak, jestem pewien") dane sa przenoszone do tabeli bookings_calendar i oznaczane jako "oczekujące" - zazwyczaj chodzi o potwierdzenie wpłaty.

W zasadzie wyrysowanie kalendarza to pestka, bo powiedzmy, dla jednego miesiąca wyciągamy maksymalnie 62 rekordy i trzeba na nich tylko raz dokonać jakiejś obróbki, żeby było wiadomo, jaki obrazek podstawić w komórce tabeli.

Wada to jak wspomniałem, wyszukiwanie wolnych terminów - nie ma ich w bazie, więc trzeba wyciągnąć wszystkie rekordy z żądanego zakresu, utworzyć dodatkową tablicę ze wszystkimi datami i dopiero wtedy, w pętli zdejmować z niej te dni, które wyciągnęliśmy z bazy. To, co w niej zostanie, to dni wolne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie jest to zbyt wydajne, więc chyba spróbuję wykorzystać dane z tabeli zamówień, zgodnie z tym, cp napisałeś
Mało wydajne jest też wstawianie rekordów - w Propelu to masakra - nie polecam :/

Z samego efektu jestem jednak zadowolony.
http://img56.imageshack.us/img56/8348/cal3nt4.png (dodatkowo uzupełniłem o eventy)

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 3.10.2025 - 20:24