Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obliczanie wieku użytkownika
djsalat
post 30.05.2010, 17:12:42
Post #1





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


Witam!

Zrobiłem sobie rejestrację w której uzytkownik podaje swoją datę urodzenia. Na tej podstawie formularz całej rejestracji z datą oraz innymi duperelami zostaje wysyłany jest do bazy. Teraz się zastanawiam jakiego typu ma być pole bazie i jaki format ma być daty.

Następnie potrzebuje sposobu obliczania wieku na podstawie daty:)

Pomoże ktośquestionmark.gifsmile.gif

  1.  
  2. <?php
  3.  
  4. $data = strtotime('1989-05-03')
  5.  
  6. $roznica = time() - $date;
  7.  
  8. ?>


To będzie dobre?? bo znalazlem w podobnym temacie
Go to the top of the page
+Quote Post
tehaha
post 30.05.2010, 17:13:47
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Widzę, że łatwiej zadaje się pytania na forum niż w google szuka....http://dev.mysql.com/doc/refman/5.1/en/datetime.html, http://php.net/manual/en/function.date.php, http://php.net/manual/en/function.strtotime.php
te 3 linki + pomyśleć = sukces
Go to the top of the page
+Quote Post
djsalat
post 30.05.2010, 17:30:54
Post #3





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


a jak zrobić sprawdzenie daty wysłanej w formularzu?? tzn czy jest poprawna.... zeby sobie nie robili jaj i ze 13 misiąc albo luty 31 dni.

Ten post edytował djsalat 30.05.2010, 17:31:25
Go to the top of the page
+Quote Post
tehaha
post 30.05.2010, 17:36:11
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no najlepiej zrobić wybór daty z pól select, co do ilości dni to najprościej będzie Ci to ręcznie sprawdzić w php, ewentualnie mógłbyś użyć javascript żeby po ustawieniu miesiąca ustawiał w polu dni tylko tyle ile może być dla danego miesiąca
Go to the top of the page
+Quote Post
djsalat
post 30.05.2010, 17:47:47
Post #5





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


No napisalem sobie coś takiego:

  1. <label for="login">Data Urodzenia:</label></td> <td align="left">&nbsp;<select name=dzien>
  2. <option value="" id="rozwijane_pierwsze">Dzień&nbsp;</option>
  3. <option value="01" id="rozwijane">01</option>
  4. <option value="02" id="rozwijane">02</option>
  5. <option value="03" id="rozwijane">03</option>
  6. <option value="04" id="rozwijane">04</option>
  7. <option value="05" id="rozwijane">05</option>
  8. <option value="06" id="rozwijane">06</option>
  9. <option value="07" id="rozwijane">07</option>
  10. <option value="08" id="rozwijane">08</option>
  11. <option value="09" id="rozwijane">09</option>
  12. <option value="10" id="rozwijane">10</option>
  13. <option value="11" id="rozwijane">11</option>
  14. <option value="12" id="rozwijane">12</option>
  15. <option value="13" id="rozwijane">13</option>
  16. <option value="14" id="rozwijane">14</option>
  17. <option value="15" id="rozwijane">15</option>
  18. <option value="16" id="rozwijane">16</option>
  19. <option value="17" id="rozwijane">17</option>
  20. <option value="18" id="rozwijane">18</option>
  21. <option value="19" id="rozwijane">19</option>
  22. <option value="20" id="rozwijane">20</option>
  23. <option value="21" id="rozwijane">21</option>
  24. <option value="22" id="rozwijane">22</option>
  25. <option value="23" id="rozwijane">23</option>
  26. <option value="24" id="rozwijane">24</option>
  27. <option value="25" id="rozwijane">25</option>
  28. <option value="26" id="rozwijane">26</option>
  29. <option value="27" id="rozwijane">27</option>
  30. <option value="28" id="rozwijane">28</option>
  31. <option value="29" id="rozwijane">29</option>
  32. <option value="30" id="rozwijane">30</option>
  33. <option value="31" id="rozwijane">31</option>
  34. <select name=Miesiac>
  35. <option value="" id="rozwijane_pierwsze">Miesiąc&nbsp;</option>
  36. <option value="Styczeń" id="rozwijane">Styczeń</option>
  37. <option value="Luty" id="rozwijane">Luty</option>
  38. <option value="Marzec" id="rozwijane">Marzec</option>
  39. <option value="Kwiecień" id="rozwijane">Kwiecień</option>
  40. <option value="Maj" id="rozwijane">Maj</option>
  41. <option value="Czerwiec" id="rozwijane">Czerwiec</option>
  42. <option value="Lipiec" id="rozwijane">Lipiec</option>
  43. <option value="Sierpień" id="rozwijane">Sierpień</option>
  44. <option value="Wrzesień" id="rozwijane">Wrzesień</option>
  45. <option value="Październik" id="rozwijane">Październik</option>
  46. <option value="Listopad" id="rozwijane">Listopad</option>
  47. <option value="Grudzień" id="rozwijane">Grudzień</option>
  48. </select>
  49. <select name="Rok">
  50. <option value="" id="rozwijane_pierwsze">Rok&nbsp;&nbsp;&nbsp;</option>
  51. <option value="1911" id="rozwijane">1911</option>
  52. <option value="1912" id="rozwijane">1912</option>
  53. <option value="1913" id="rozwijane">1913</option>
  54. <option value="1914" id="rozwijane">1914</option>
  55. <option value="1915" id="rozwijane">1915</option>
  56. <option value="1916" id="rozwijane">1916</option>
  57. <option value="1917" id="rozwijane">1917</option>
  58. <option value="1918" id="rozwijane">1918</option>
  59. <option value="1919" id="rozwijane">1919</option>
  60. <option value="1920" id="rozwijane">1920</option>
  61. <option value="1921" id="rozwijane">1921</option>
  62. <option value="1922" id="rozwijane">1922</option>
  63. <option value="1923" id="rozwijane">1923</option>
  64. <option value="1924" id="rozwijane">1924</option>
  65. <option value="1925" id="rozwijane">1925</option>
  66. <option value="1926" id="rozwijane">1926</option>
  67. <option value="1927" id="rozwijane">1927</option>
  68. <option value="1928" id="rozwijane">1928</option>
  69. <option value="1929" id="rozwijane">1929</option>
  70. <option value="1930" id="rozwijane">1930</option>
  71. <option value="1931" id="rozwijane">1931</option>
  72. <option value="1932" id="rozwijane">1932</option>
  73. <option value="1933" id="rozwijane">1933</option>
  74. <option value="1934" id="rozwijane">1934</option>
  75. <option value="1935" id="rozwijane">1935</option>
  76. <option value="1936" id="rozwijane">1936</option>
  77. <option value="1937" id="rozwijane">1937</option>
  78. <option value="1938" id="rozwijane">1938</option>
  79. <option value="1939" id="rozwijane">1939</option>
  80. <option value="1940" id="rozwijane">1940</option>
  81. <option value="1941" id="rozwijane">1941</option>
  82. <option value="1942" id="rozwijane">1942</option>
  83. <option value="1943" id="rozwijane">1943</option>
  84. <option value="1944" id="rozwijane">1944</option>
  85. <option value="1945" id="rozwijane">1945</option>
  86. <option value="1946" id="rozwijane">1946</option>
  87. <option value="1947" id="rozwijane">1947</option>
  88. <option value="1948" id="rozwijane">1948</option>
  89. <option value="1949" id="rozwijane">1949</option>
  90. <option value="1950" id="rozwijane">1950</option>
  91. <option value="1951" id="rozwijane">1951</option>
  92. <option value="1952" id="rozwijane">1952</option>
  93. <option value="1953" id="rozwijane">1953</option>
  94. <option value="1954" id="rozwijane">1954</option>
  95. <option value="1955" id="rozwijane">1955</option>
  96. <option value="1956" id="rozwijane">1956</option>
  97. <option value="1957" id="rozwijane">1957</option>
  98. <option value="1958" id="rozwijane">1958</option>
  99. <option value="1959" id="rozwijane">1959</option>
  100. <option value="1960" id="rozwijane">1960</option>
  101. <option value="1961" id="rozwijane">1961</option>
  102. <option value="1962" id="rozwijane">1962</option>
  103. <option value="1963" id="rozwijane">1963</option>
  104. <option value="1964" id="rozwijane">1964</option>
  105. <option value="1965" id="rozwijane">1965</option>
  106. <option value="1966" id="rozwijane">1966</option>
  107. <option value="1967" id="rozwijane">1967</option>
  108. <option value="1968" id="rozwijane">1968</option>
  109. <option value="1969" id="rozwijane">1969</option>
  110. <option value="1970" id="rozwijane">1970</option>
  111. <option value="1971" id="rozwijane">1971</option>
  112. <option value="1972" id="rozwijane">1972</option>
  113. <option value="1973" id="rozwijane">1973</option>
  114. <option value="1974" id="rozwijane">1974</option>
  115. <option value="1975" id="rozwijane">1975</option>
  116. <option value="1976" id="rozwijane">1976</option>
  117. <option value="1977" id="rozwijane">1977</option>
  118. <option value="1978" id="rozwijane">1978</option>
  119. <option value="1979" id="rozwijane">1979</option>
  120. <option value="1980" id="rozwijane">1980</option>
  121. <option value="1981" id="rozwijane">1981</option>
  122. <option value="1982" id="rozwijane">1982</option>
  123. <option value="1983" id="rozwijane">1983</option>
  124. <option value="1984" id="rozwijane">1984</option>
  125. <option value="1985" id="rozwijane">1985</option>
  126. <option value="1986" id="rozwijane">1986</option>
  127. <option value="1987" id="rozwijane">1987</option>
  128. <option value="1988" id="rozwijane">1988</option>
  129. <option value="1989" id="rozwijane">1989</option>
  130. <option value="1990" id="rozwijane">1990</option>
  131. <option value="1991" id="rozwijane">1991</option>
  132. <option value="1992" id="rozwijane">1992</option>
  133. <option value="1993" id="rozwijane">1993</option>
  134. <option value="1994" id="rozwijane">1994</option>
  135. <option value="1995" id="rozwijane">1995</option>
  136. <option value="1996" id="rozwijane">1996</option>
  137. <option value="1997" id="rozwijane">1997</option>
  138. <option value="1998" id="rozwijane">1998</option>
  139. <option value="1999" id="rozwijane">1999</option>
  140. <option value="2000" id="rozwijane">2000</option>
  141. <option value="2001" id="rozwijane">2001</option>
  142. <option value="2002" id="rozwijane">2002</option>
  143. <option value="2003" id="rozwijane">2003</option>
  144. <option value="2004" id="rozwijane">2004</option>
  145. </select>




i php

  1. if((($_POST["Miesiac"]) == Kwiecień) and ($_POST["dzien"]) == 31) {
  2. echo 'Przecież kwiecień nie ma 31 dni!';
  3. }
  4. else {
  5. if((($_POST["Miesiac"]) == Czerwiec) and ($_POST["dzien"]) == 31) {
  6. echo 'Przecież czerwiec nie ma 31 dni!';
  7. }
  8. else {
  9. if((($_POST["Miesiac"]) == Wrzesień) and ($_POST["dzien"]) == 31) {
  10. echo 'Przecież wrzesień nie ma 31 dni';
  11. }
  12. else {
  13. if((($_POST["Miesiac"]) == Listopad) and ($_POST["dzien"]) == 31) {
  14. echo 'Przecież listopad nie ma 31 dni!';
  15. }
  16. else {
  17. if((($_POST["Miesiac"]) == Luty) and ($_POST["dzien"]) == 31){
  18. echo 'Przecież luty nie ma 31 dni!';
  19. }
  20. else {
  21. if((($_POST["Miesiac"]) == Luty) and ($_POST["dzien"]) == 30){
  22. echo 'Przecież luty nie ma 30 dni!';
  23. }
  24. else {
  25. if((($_POST["Miesiac"]) == Luty) and (($_POST["dzien"]) == 29) and ((($_POST["Rok"]) % 4) > 0)) {
  26. echo 'W tym roku luty nie był przystępny!';
  27. }
  28. else {


a teraz korzystam z

Datepickera
Go to the top of the page
+Quote Post
croc
post 30.05.2010, 17:51:47
Post #6





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Lepiej użyj funkcji checkdate zamiast męczyć się z tymi warunkami, które:

a) są brzydkie
cool.gif nie uwzględniają roku przestępnego prawidłowo (rok 2000 to NIE JEST rok przestępny)

Po drugie, moim zdaniem wybieranie daty przez <select> to wiocha (zwłaszcza dnia i roku).
Go to the top of the page
+Quote Post
djsalat
post 30.05.2010, 18:58:29
Post #7





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


ok checkdate

ale z tego co widze to muszę po kolei podawać osobno miesiąc dzień i rok....

a ja mam w polu odrazu format yyyy-mm-dd to jak to napisać do jak to musi być podane checkdate ( m, d, y )questionmark.gif
Go to the top of the page
+Quote Post
Wicepsik
post 30.05.2010, 19:18:51
Post #8





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


http://jqueryui.com/demos/datepicker/#option-dateFormat


--------------------
Go to the top of the page
+Quote Post
tehaha
post 30.05.2010, 19:35:44
Post #9





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


tylko jak użyjesz jakiegoś skryptu datepicker to nie zapomnij o walidacji
Go to the top of the page
+Quote Post
djsalat
post 30.05.2010, 21:13:04
Post #10





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


mam juz datepicker'a a pakuje mi datę do pola input w formacie YYYY-MM-DD . No i jak to mam to przypisuje to do zmiennej czyli $data=$_POST["datapicker"] .

no i teraz jak sprawdzić czy data w zmiennej jest prawidłowa??

checkdate($data)


tak bedzie ok??
Go to the top of the page
+Quote Post
croc
post 30.05.2010, 21:30:18
Post #11





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Ustaw sobie w opcjach datepickera format daty na DD.MM.RRRR (taki jaki obowiązuje w Polsce).
  1. if(!preg_match('/^\d{2}\.\d{2}\.\d{4}$/', $data)) {
  2. // zły format daty
  3. }
  4. else {
  5. list($dzien, $miesiac, $rok) = explode('.', $data);
  6. if(!checkdate(intval($miesiac), intval($dzien), intval($rok))) {
  7. // format prawidłowy, ale data nieprawidłowa
  8. }
  9. else {
  10. // wszystko w porządku :)
  11. }
  12. }
Go to the top of the page
+Quote Post
djsalat
post 30.05.2010, 21:35:26
Post #12





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


a w bazie danych?questionmark.gif własnie taki miałem w bazie danych.
Go to the top of the page
+Quote Post
croc
post 30.05.2010, 21:40:31
Post #13





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


W bazie danych musi być jako RRRR-MM-DD. Zaproponowałem taki format daty, bo niektórzy wolą wpisywać zamiast zaznaczać. Jeśli chcesz, możesz zrobić od razu w datepickerze format taki jak w MySQL. Będzie mniej roboty, ale wg mnie gorszy efekt. Jeśli chcesz zachować zaproponowany przeze mnie format, to przez zapisem do bazy musisz z powrotem "złożyć" datę.
  1. if(!preg_match('/^\d{2}\.\d{2}\.\d{4}$/', $data)) {
  2. // zły format daty
  3. }
  4. else {
  5. list($dzien, $miesiac, $rok) = explode('.', $data);
  6. if(!checkdate(intval($miesiac), intval($dzien), intval($rok))) {
  7. // format prawidłowy, ale data nieprawidłowa
  8. }
  9. else {
  10. // wszystko w porządku :)
  11. $dataMySQL = $rok . '-' . $miesiac . '-' . $dzien;
  12. }
  13. }
Go to the top of the page
+Quote Post
djsalat
post 30.05.2010, 23:32:37
Post #14





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


a dla od razu mojeo formatu to:


  1. if(!preg_match('/^\d{4}\-\d{2}\-\d{2}$/', $data))
  2.  
  3.  



questionmark.gif

dzięki wszystko śmiga aż smile.gif dzięki bardzo:)
Go to the top of the page
+Quote Post
croc
post 31.05.2010, 07:08:54
Post #15





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Wszystko tam odpowiednio przekonwertowałeś? Bo jeśli chcesz wersję od razu z datą RRRR-MM-DD, to w kilku miejscach trzeba zmienić kod.
Go to the top of the page
+Quote Post
djsalat
post 31.05.2010, 15:05:24
Post #16





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 20.01.2010
Skąd: łódzkie

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


Przerabiałem ale wróciłem do twojego smile.gif


tylko drobne modyfikacje z tekstem zrobiłem;p

  1. if (empty($_POST["datapicker"])) {
  2. $blad++;
  3. echo '<span class="blad">Musisz podać swoją datę urodzenia.</span>';
  4. }
  5. else {
  6. if(!preg_match('/^\d{2}\-\d{2}\-\d{4}$/', $datapicker)) {
  7. $blad++;
  8. echo '<span class="blad">Zły format daty. Prawidłowy to DD-MM-RRRR</span>';
  9. }
  10. else {
  11. list($dzien, $miesiac, $rok) = explode('-', $datapicker);
  12. if(!checkdate(intval($miesiac), intval($dzien), intval($rok))) {
  13. $blad++;
  14. echo '<span class="blad">Taka data nie istnieje.</span>';
  15. }
  16. }
  17. }


a przy wysylaniu do bazy napierw przypisuje do zmiennej $data_ur = $rok . '-' . $miesiac . '-' . $dzien;

i wysyłam zmienną $data-ur do bazy danych:)

To mi ładnie oblicza ale chce z dokładnością do dnia wiec co musisz dodać do tego??


  1. list($rok, $miesiac, $dzien) = explode('-', $dana_z_bazy_2);
  2.  
  3. $wiek = date(Y) - $rok;
  4. if (($wiek > 21 && ($wiek % 10 == "2" || $wiek % 10 == "3" || $wiek % 10 == "4")) || $wiek < 5) {
  5. $koncowka = "lata";
  6. } else {
  7. $koncowka = "lat";
  8. }
  9. $wiek_z_przedrostkiem = $wiek . '&nbsp;' . $koncowka;
  10. echo $wiek_z_przedrostkiem;
  11.  
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: 31.05.2024 - 04:34