Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]walidujemy i sprawdzamy datę i czas
Darkstorm
post 23.08.2010, 11:15:17
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.08.2010

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


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

Go to the top of the page
+Quote Post
melkorm
post 23.08.2010, 11:29:27
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


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


--------------------
Go to the top of the page
+Quote Post
matino
post 23.08.2010, 11:31:15
Post #3





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

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


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);
Go to the top of the page
+Quote Post
thek
post 23.08.2010, 11:58:03
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Darkstorm
post 23.08.2010, 12:19:31
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.08.2010

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


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

Ten post edytował Darkstorm 23.08.2010, 13:42:05
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 Wersja Lo-Fi Aktualny czas: 23.06.2025 - 18:59