Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Sprawdzanie rezerwacji
Forum PHP.pl > Forum > Przedszkole
greg.paw.90
Witam,
tworzę znajomemu system rezerwacji wizyt w warsztacie.
Wszsytko szło mi dobrze aż do momenu w którym sprawdzam czy wybrany przez użytkownika termin jest wolny.

Nie bardzo potrafie sobie z tym poradzić.
Raz działa raz nie - tzn w zależności ile czasu trwa wizyta przed/po wybranej przez nas nowej wizycie

Jak robie:

Wywołanie metody sprawdzania:

  1.  
  2. $_POST['start'] = '3-2-2012 14:0';
  3. $_POST['end'] = '3-2-2012 17:0';
  4. $_GET['i'] = 30; //interwał czasowy
  5. $start = date('Y-m-d H:i:s', strtotime($_POST['start']));
  6. $end = date('Y-m-d H:i:s', strtotime($_POST['end']));
  7. $booking = new Booking();
  8. $booking->id = $_POST['id'];
  9. if($booking->isAvailable($start,$end,$_GET['i'])){
  10. echo 1;
  11. } else {
  12. echo 0;
  13. }
  14.  



Metoda sprawdzająca:

  1.  
  2. public function isAvailable($start,$end,$i=30){
  3.  
  4. if((time()+(60*60))>strtotime($start)){
  5. return false;
  6. }
  7.  
  8. $start_time = strtotime($start);
  9. $end_time = strtotime($end);
  10.  
  11. $sql = 'SELECT id_booking FROM '.$this->prefix.$this->table.' WHERE id_objects='.$this->id.' AND (booking_from LIKE "'.substr($start,0,10).'%" AND booking_to LIKE "'.substr($end,0,10).'%") AND ((start_time>='.$start_time.' AND end_time<='.$end_time.') OR (start_time<=('.($end_time+($i)).'*(CEIL(end_time-start_time)/3600)) AND end_time>=('.($start_time+($i*30)).'))*(CEIL(end_time-start_time)/3600)) AND status != 9';
  12.  
  13. $sql2 = $sql = 'SELECT id_booking_blocked FROM '.$this->prefix.$this->table.'_blocked WHERE id_objects='.$this->id.' AND (booking_from LIKE "'.substr($start,0,10).'%" AND booking_to LIKE "'.substr($end,0,10).'%") AND ((start_time>='.$start_time.' AND end_time<='.$end_time.') OR (start_time<=('.($end_time+($i)).'*(CEIL(end_time-start_time)/3600)) AND end_time>=('.($start_time+($i*30)).'))*(CEIL(end_time-start_time)/3600))';
  14.  
  15. if($this->db->count($sql) || $this->db->count($sql2)){
  16. return false;
  17. } else {
  18. return true;
  19. }
  20.  
  21. }
  22.  




$sql = zapytanie do sprawdzania czy już ktoś umówił się w tym dniu
$sql2 = zapytanie do sprawdzenia czy ten termin nie jest wyłączony z rezerwacji


Moge liczyć na jakieś wskazówki?

Pozdrawiam
IceManSpy
Pierwsza rzecz jaka rzuciła mi się w oczy, to w 1. kodzie przypisanie do zmiennej GET liczby 30. Po co przypisujesz to do GET'a ?

Pokaż implementacje tego: $this->db->count($sql) , bo pewno w tym masz błąd.
W zapytaniu pobierasz tylko id - wykorzystaj funkcję count() dla MySQL - zwróci Ci liczbę wierszy.
greg.paw.90
Przypisuje to do GETA w celu dodania intervału dla zapytania (zmienna $i), później ujednolice wszystko i będzie w poście lub będzie pobierane z bazy
Metoda count - zlicza ile wierszy spełnia warunek

----
edit
problem rozwiązany

  1. $sql = 'SELECT id_booking FROM '.$this->prefix.$this->table.' WHERE id_objects='.$this->id.' AND status!=9 AND (start_time>'.$start_time.' AND start_time<'.$end_time.') OR (start_time<='.$start_time.' AND end_time>'.$start_time.')';
  2. $sql2 = 'SELECT id_booking_blocked FROM '.$this->prefix.$this->table.'_blocked WHERE id_objects='.$this->id.' AND (start_time>'.$start_time.' AND start_time<'.$end_time.') OR (start_time<='.$start_time.' AND end_time>'.$start_time.')';
  3.  
  4. if($this->db->count($sql)){
  5. return false;
  6. } else {
  7. if($this->db->count($sql2)){
  8. return false;
  9. } else {
  10. return true;
  11. }
  12. }
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.