Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] walidacja godziny
Jarod
post 30.05.2006, 13:42:40
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Mam w bazie pole odzina typu TIME.

Czyli godzina przetrzymywana jest jako, np. 16:55:34

Testuje formularz i gdy użytkownik wpisze string to skrypt się wywala. Jak sprawdzać czy użytkownik wpisał poprawnie godzine?

ps. musi być możliwość ręcznej edycji godziny (tylko godziny i minuty).

Ten post edytował J4r0d 6.06.2006, 21:01:48


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
siemakuba
post 30.05.2006, 14:00:20
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


chodzi ci o to, czy wpisał godzinę w poprawnym formacie? (np. 15:22 jest OK?)

moze byc regEx, ale nie zabezpieczysz sie latwo przed np. wpisaniem goindzy 65:98 :/

wiec, probujesz rozbic wpisana wartosc przez ':'. Jezeli otrzymujesz tablice dwuelementowa w wwyniku takiego rozbicia - OK, jedziesz dalej. A dalej rzutujesz oba elementy tablicy na int, sprawdzasz czy znajduja sie w odpowiednim przedziale (0-24, 0-59) i juz wiesz czy jest OK.

  1. <?php
  2. function checkTime($time)
  3. {
  4. $t = explode(':', $time);
  5.  
  6. if (count($t) != 2)
  7. { return false;
  8. }
  9.  
  10. $hour = (int) $t[0];
  11. $minute = (int) $t[1];
  12.  
  13. if ( ($minute < 0 || $minute > 59) || ($hour < 0 || $hour > 24) )
  14. { return false;
  15. }
  16. return true;
  17. }
  18. ?>


byc moze mozna to rozwiazac jakos bardziej "elegancko", ale wlasnie takie rozwiazanie wpadlo mi do glowy :>

pozdr.
Go to the top of the page
+Quote Post
nospor
post 30.05.2006, 14:11:52
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@siemakuba tez kiedys robilem podobnie. ale teraz tak mi wpadl pomysl, zeby rzutowac czas do znacznika czasu i spowrotem do godziny. jesli po przektalceniach godziny są ok, znaczy ze godzina jest poprawna:
  1. <?php
  2. function checkTime($time){
  3. return @($time === date('H:i',strtotime($time)));
  4. }
  5.  
  6. echo checkTime('23:80') ? 'ok <br />' : 'nieok <br />';
  7. echo checkTime('23:12') ? 'ok <br />' : 'nieok <br />';
  8. echo checkTime('23:') ? 'ok <br />' : 'nieok <br />';
  9. ?>

Są jakies luki w tym systemie? Jak pisalem wpadlem na to teraz i za bardzo nie tescilem, ale wydaje sie byc ok.

@J4r0d kto zapomnial o znaczikach w tytule? winksmiley.jpg prosze poprawic


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
siemakuba
post 30.05.2006, 14:30:28
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


@nospor: bardzo fajna koncepcja! szybki test pokazal ze zalozenie jest sluszne. Niekoniecznie potrzebna jest @ z przodu, bo nawet takie wywolanie strtotime('siemakuba') zwraca bez problemu wartosc (00:00) i zadnego bledu (chyba ze E_NOTICE - sprawdzalem na E_ALL ~&E_NOTICE).

mozna zamiast malpy zrzutowac to na (bool) tak dla pewnosci. Chociaz zupelnie nie jest to konieczne.

pozdr.
Go to the top of the page
+Quote Post
nospor
post 30.05.2006, 14:32:18
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Niekoniecznie potrzebna jest @ z
Uwierz, potrzebna jest smile.gif Moze masz wylaczone wyswietlanie warningow, ale moj trzeci przyklad pluje wlasnie warningiem, dlatego tez dalem malpe smile.gif

Cytat
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970

Na chama mozna by sie bawic w warunki, ale to by wydluzylo skrypt, ja chcialem to w jednej linii zmiescic


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
siemakuba
post 30.05.2006, 15:21:56
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Cytat
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970

no, to wszystko jasne :) test przeprowadziłem na Unixie, i tak jak pisalem z wylaczonym E_NOTICE jedynie.
Z małpą czy bez - koncepcja jest fajna i warta przyzwyczajenia sie do niej :)

pozdr.

edit:
sorki... gapa jestem... display_errors = 0...

edit2:
Cytat
ja chcialem to w jednej linii zmiescic

tak, dobry one-liner nie jest zły :)

Ten post edytował siemakuba 30.05.2006, 15:23:30
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: 20.07.2025 - 09:17