Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Sprawdzanie częsci daty
Forum PHP.pl > Forum > Przedszkole
gawar
Witam, Mam dość nietypowy problem bowiem w bazie mysql mam w jednej tabeli pole daty typu date. Mysql dopuszcza wprowadzenie daty typu (2012-00-00 czy też 2012-01-00). W mojej aplikacji muszę użytkownikowi umożliwić opcję wpisania nie pełnej daty np samego roku 2013-00-00. problemu by nie było jakby użytkownik wybierał sobie poszczególne części daty (dzień, miesiąc, rok) z rozwijanej listy. Wtedy po prostu dopisałbym oprócz np miesięcy <option value="00">??</option>. Problem w tym, że użytkownik nie chce mieć opcji wybierania daty tylko wpisywania jej z palca. I tu teraz pojawia się problem. bowiem jak zrobić żeby np w przypadku wpisania czegoś takiego jak 2012-13-01 w bazie nie było zapisu 0000-00-00 tylko żeby zwrócić użytkownikowi to jako błąd? Do tej pory napisałem kod który sprawdza czy wszystkie pola części daty są uzupełnione jeżeli tak to sprawdza tą datę funkcją checkdate() jeżeli nie to tam gdzie pole nie zostało uzupełnione dopisuje zera. Ale jak sprawdzić czy użytkownik jeżeli czegoś nie wpisał to czy reszta jest ok? Poniżej zamieszczam kod który napisałem do tej pory. Jeżeli ktoś ma może jakiś inny pomysł jak rozwiązać ten problem to proszę o podpowiedź.
  1. if (isset($_POST['data_sm_dzien']) && empty($_POST['data_sm_dzien']))
  2. {
  3. $data_sm_dzien="00";
  4. $s=1;
  5. } else
  6. {
  7. if (isset($_POST['data_sm_dzien']) && is_numeric($_POST['data_sm_dzien']))
  8. {
  9. $data_sm_dzien = trim($_POST['data_sm_dzien']);
  10. }
  11. }
  12.  
  13. if (isset($_POST['data_sm_miesiac']) && empty($_POST['data_sm_miesiac']))
  14. {
  15. $data_sm_miesiac="00";
  16. $s=1;
  17. } else
  18. {
  19. if (isset($_POST['data_sm_miesiac']) && is_numeric($_POST['data_sm_miesiac']))
  20. {
  21.  
  22. $data_sm_miesiac = trim($_POST['data_sm_miesiac']);
  23. }
  24. }
  25.  
  26. if (isset($_POST['data_sm_rok']) && empty($_POST['data_sm_rok']))
  27. {
  28. $data_sm_rok="0000";
  29. $s=1;
  30. } else
  31. {
  32. if (isset($_POST['data_sm_rok'])&& is_numeric($_POST['data_sm_rok']))
  33. {
  34. if (preg_match($spr,$_POST['data_sm_rok'])){
  35. }
  36. $data_sm_rok = trim($_POST['data_sm_rok']);
  37. }
  38. }
  39.  
  40. if ($s==1)
  41. {
  42. $data_sm = "$data_sm_rok-$data_sm_miesiac-$data_sm_dzien";
  43. } else
  44. {
  45. if (checkdate($_POST['data_sm_miesiac'], $_POST['data_sm_dzien'], $_POST['data_sm_rok']))
  46. {
  47. $data_sm_dzien=$_POST['data_sm_miesiac'];
  48. $data_sm_miesiac=$_POST['data_sm_dzien'];
  49. $data_sm_rok=$_POST['data_sm_rok'];
  50.  
  51. $data_sm = "$data_sm_rok-$data_sm_miesiac-$data_sm_dzien";
  52. }
  53. else
  54. {
  55. echo "Data jest nieprawidłowa! Podaj prawdziwą!";
  56. }
  57. }
b4rt3kk
Ale nie rozumiem w czym jest problem, żeby sprawdzić czy miesiąc jest większy od 1 i mniejszy od 12, jak i czy dzień zawiera się pomiędzy 1 a 31? Gdzie tu jest trudność, nawet nie musisz dzielić tego stringa, bo już widzę masz wszystko w osobnych inputach.
gawar
Tak, chodzi o sprawdzenie tych zakresów. Cienki jestem w wyrażeniach regularnych:(

Podpowie ktoś jak to sprawdzić.?
skowron-line
No ale skoro masz to wszystko osobno to po co Ci wyrażenia regularne możesz sobie ifów strzelić
lub http://stackoverflow.com/questions/5032313...date-validation
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.