Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyślwietlanie daty
Forum PHP.pl > Forum > Przedszkole
Bieniu
Witam

Prosiłbym o sprawdzenie gdzie mam błąd w kodzie

  1. <?php
  2.  
  3. class Data
  4. {
  5. private $dzien;
  6. private $miesiac;
  7. private $rok;
  8.  
  9. private function Walidacja()
  10. {
  11. if($this->dzien <= 1 AND $this->dzien >= 31)
  12. {
  13. echo "this->dzien - Nieprawidłowy numer dnia<br/>";
  14. return false;
  15. }
  16. else
  17. {
  18. switch($this->miesiac)
  19. {
  20. case 1:
  21. if($this->rok / 2 > 0 OR $this->dzien < 29)
  22. {
  23. echo "Luty w roku przestępnym może mieć tylko 29 dni<br/>";
  24. return false;
  25. }
  26. elseif($this->rok / 2 != 0 OR $this->dzien >= 28)
  27. {
  28. echo "Luty w roku NIE przestępnym może mieć tylko 28 dni<br/>";
  29. return true;
  30. }
  31. break;
  32.  
  33. case 4:
  34. case 6:
  35. case 9:
  36. case 12:
  37. if($this->dzien = 30)
  38. {
  39. echo "Miesiąc MiesiacNaTekst() ma tylko 30 dni!<br/>";
  40. return false;
  41. }
  42. break;
  43. }
  44. }
  45.  
  46. if($this->miesiac <= 1 AND $this->miesiac >= 12)
  47. {
  48. echo "this->miesiac - Nieprawidłowy numer miesiąca<br/>";
  49. return true;
  50. }
  51.  
  52. if($this->rok <= 2010)
  53. {
  54. echo "this->rok - Uwzględniany jest tylko rok począwszy od 2010<br/>";
  55. return true;
  56. }
  57.  
  58. return true;
  59. }
  60.  
  61. private function MiesiacNaTekst()
  62. {
  63. switch($this->miesiac)
  64. {
  65. case "1": return styczeń; break;
  66. case "2": return luty; break;
  67. case "3": return marzec; break;
  68. case "4": return kwiecień; break;
  69. case "5": return maj; break;
  70. case "6": return czerwiec; break;
  71. case "7": return lipiec; break;
  72. case "8": return sierpień; break;
  73. case "9": return wrzesień; break;
  74. case "10": return paĽdziernik; break;
  75. case "11": return listopad; break;
  76. case "12": return grudzień; break;
  77. }
  78. }
  79.  
  80. public function WyswietlDane()
  81. {
  82. if($this->Walidacja())
  83. {
  84. echo "dzień = $this->dzien, miesiąc = MiesiacNaTekst(), rok = $this->rok<br/>";
  85. return true;
  86. }
  87. else
  88. return false;
  89. }
  90.  
  91. public function __construct($dzien, $miesiac, $rok)
  92. {
  93. $this->dzien = $dzien;
  94. $this->miesiac = $miesiac;
  95. $this->rok = $rok;
  96. }
  97. }
  98.  
  99. class DataNotatka extends Data
  100. {
  101. private $notatka;
  102.  
  103. public function __construct($dzien, $miesiac, $rok, $notatka)
  104. {
  105. parent::__construct($dzien, $miesiac, $rok);
  106. $this->notatka = $notatka;
  107. }
  108.  
  109. public function WyswietlDane()
  110. {
  111. if(parent::WyswietlDane())
  112. echo "<b>this->notatka</b><br/>";
  113. echo "<hr/>";
  114. }
  115. }
  116.  
  117. $data1 = new DataNotatka(37,12,2011,"Urodziny Basi");
  118. $data2 = new DataNotatka(17,13,2011,"Urodziny Kasi");
  119. $data3 = new DataNotatka(16,7,2008,"Urodziny Marysi");
  120. $data4 = new DataNotatka(29,2,2011,"Urodziny Krysi");
  121. $data5 = new DataNotatka(29,2,2012,"Urodziny Zosi");
  122. $data6 = new DataNotatka(31,6,2011,"Urodziny Mieci");
  123. $data7 = new DataNotatka(18,1,2012,"Imieniny Monisi");
  124.  
  125. $data1->WyswietlDane();
  126. $data2->WyswietlDane();
  127. $data3->WyswietlDane();
  128. $data4->WyswietlDane();
  129. $data5->WyswietlDane();
  130. $data6->WyswietlDane();
  131. $data7->WyswietlDane();
  132.  
  133. ?>
erix
I co się niby ma robić?
lobopol
I jaki błąd?
Bieniu
Ma wyświetlać datę daną numerycznie
(dzień, miesiąc, rok) oraz powiązać z tą datą notatki tekstowe.

Dodatkowo, przed wyświetleniem daty należy wykonać procedurę sprawdzenia (walidacji) tej daty
- true jeśli data jest OK, false jeśli data jest zła.
vokiel
@erix może to upgrade dla checkdate wink.gif

@Bieniu błąd masz przede wszystkim projektowy. Poza tym:
  • Nieprawidłowy operator w warunku w linii 11 (powinno być OR)
  • Sprawdzanie roku przestępnego (nie każdy z parzystą ostatnią liczbą jest przestępny - rok 1900 nie był i 2100 też nie będzie)
  • Wyświetlanie komunikatów przez echo
  • Niepotrzebne użycie case
  • Na twardo wpisane warunki (np na rok 2010)
lobopol
No i co nie działa, nie będziemy przecież na darmo analizować całego kodu, wysil się trochę.
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.