Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]walidujemy i sprawdzamy datę i czas
Forum PHP.pl > Forum > Przedszkole
Darkstorm
Witam. Mam pewien problem i nie do końca opracowałem sposób jego rozwiązania. Otóż mam w bazie danych dwa pola:
  1. `data` datetime NOT NULL,
  2. `czas_seansu` int(2) NOT NULL,


Data przedstawia datę i godzinę rozpoczęcia seansu wyrażoną w postaci YYYY-MM-DD HH:MM:SS.
Czas_seansu to jego długość wyrażona w minutach. (chyba int 2 wystarczy bo większy zakres przekracza możliwości i kina i człowieka winksmiley.jpg )
Uznałem że dla daty rozpoczęcia muszę mieć format datetime bo może się zdarzyć np pokaz sylwestrowy 31.12.2010 o godz. 23:00 i trwać do 01.01.2011 godz. 01:00

teraz tak:
Chcę dodać nowy seans, jednocześnie sprawdzając czy dana sala o konkretnej godzinie nie jest zajęta - wiadomo, w jednej sali dwóch filmów nie może być. Pomijam samo dodanie - problem mam z weryfikacją czy sala o określonej godzinie jest zajęta czy wolna.
Wyciągam więc z bazy danych seans na podstawie daty i czasu:
  1. mysql_query('SET NAMES utf8');
  2. $salaiczas = "SELECT * FROM seanse where sala='$sala' and data ='$data';";
  3. $sprawdz = mysql_query($salaiczas) or die("Zapytanie do bazy nie powiodło się. " . mysql_error());
  4. $result = mysql_fetch_assoc($sprawdz);



mam więc tablicę z wynikami. Ale do daty rozpoczęcia seansu muszę dodać czas jego trwania żebym wiedział kiedy zwolni się sala (zabezpieczam się przez nałożeniem się końca pierwszego seansu i początkiem drugiego w tym samym czasie na jednej sali). No i właśnie tutaj pytanie - jaki sposób dodania czasu seansu bo daty jest prawidłowy? próbuję użyć strtotime() i date() ale z mizernym skutkiem. wszystkie potrzebne dane są w bazie, nie bardzo tylko wiem jak do mam je wykorzystać po stronie php sadsmiley02.gif

melkorm
Zapisz po prostu w bazie dwie daty, startu i końca w postaci znacznika czasu, lub DATETIME jak Tobie wygodniej i wszystkie problemy powinny się rozwiązać smile.gif
matino
Datę najlepiej trzymać w formacie unix timestamp (przeczytaj o funkcji strtotime).
Później jak chcesz dodać np. 1h to dodajesz 3600 to wartości daty.
Poniżej mały przykład:

  1. $date = date("d-m-Y H:i", time());
  2. echo $date;
  3.  
  4. $date2 = strtotime($date);
  5. $date2 = $date2 + 3600;
  6. echo date("d-m-Y H:i", $date2);
thek
Jeśli już korzysta z strtotime to na cholerę ma dodawać w skrypcie? Nie po to strtotime ma 2 parametry by robić coś naokoło, skoro można od razu. Zamiast:
  1. $date = date("d-m-Y H:i", time());
  2. echo $date;
  3.  
  4. $date2 = strtotime($date);
  5. $date2 = $date2 + 3600;
  6. echo date("d-m-Y H:i", $date2);
nie prościej
  1. $date = date("d-m-Y H:i", time());
  2. echo $date;
  3. $date2 = strtotime('+1 hour', time());
  4. echo date("d-m-Y H:i", $date2);
, gdzie zamiast time() możesz dać dowolny czas typu timestamp.
Darkstorm
Cytat(melkorm @ 23.08.2010, 12:29:27 ) *
Zapisz po prostu w bazie dwie daty, startu i końca w postaci znacznika czasu, lub DATETIME jak Tobie wygodniej i wszystkie problemy powinny się rozwiązać smile.gif



ok ale dajmy na to, że podam datę początkową: 2010-20-20 a datę końcową 2010-20-20. seans trwa rok. jak sprawdzić czy data końcowa nie jest wzięta z kosmosu? w przypadku roku to ok. to jest logiczne. no ale jeśli seans trwa 2 godziny a ja wpisze 4 godziny dla seansu? chciałbym zrobić wersję idioto odporną - czyli nawet jeśli posadzić małpę przy komputerze i kazać jej dodać seans to nie wrzuci do bazy danych z d...y wziętych....


co do strtotime... narazie cały czas mam datę 1970.... muszę sprawdzić dlaczego..


//edit - pytanko małe:

  1. #
  2. $date2 = strtotime('+1 hour', time());


da się zamiast '+1 hour' wprowadzić parametr dynamicznie pobrany ze zmiennej ? możliwe że źle zapisuję ale wolę zapytać niż próbować zrobić coś czego się nie da biggrin.gif


//edit2

zrobione czarodziej.gif
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.