[ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
NapísalOffline : 28.04.2009 11:06 | datum narodenia

Nazdarek. Potreboval by som poradit/pomoct s riesenim..
Zapracoval som si do formulara pridavanie datumu narodenia pre vypocet veku uzivatela. No a potreboval by som pomoct s osetrenim. Script na spracovanie vyzera nasledovne :
Kód:
<?
if (isset($_POST["odoslat"]))
{
$date1=$_POST["datum"];
$date1= str_replace(".", "", $date1);
$date1 = str_replace(",", "", $date1);



if (is_numeric($date1) && (strlen($date1) >= 6) && (strlen($date1) <= 8))
{
echo "Spravny tvar datumu ! <br>";

$datumNarodenia=$_POST["datum"];

list($den, $mesiac, $rok) = explode('.', $datumNarodenia);
list($den, $mesiac, $rok) = explode(',', $datumNarodenia);
$datumNarodenia = mktime(0, 0, 0, $mesiac, $den, $rok);
$dodb = "$rok-"."$mesiac-"."$den";

$t = mysql_query("INSERT INTO xxxx (datumnarodenia)
VALUES('$dodb')");
if (!$t) {
 echo " Prepáčte, ale pri spojovaní došlo ku chybe na strane servera. <br>
Prosím, zopakujte odoslanie Vášho formulára. ";   
}
else
{
 echo " Datum narodenia bol uspešne odoslany. <br>";   
}


$vek = floor((date("Ymd") - date("Ymd", $datumNarodenia)) / 10000);


echo " <b>Vás datum narodenia: </b>$datumNarodenia <br>";

echo "<b> Váš vek </b> : $vek <br>";
}

else
{
 echo " Nespravny tvar datumu !!!  <br>";   
}

}
?>


Script funguje ale ma maly zadrhel. :cry: Totiz ak uzivatel zada datum vo formate napr. 1.1.1980 alebo 01.01.1980. tak to fachci. Problem je, ze v mojom pripade uzivatel moze zadat datum aj vo fomate: 1.1.198888 !! A to je ten problem. Pretoze pri takomto formate datumu vyjde uplny nezmysel...nejake zaporne cislo (napr.-196879). A to prave nechcem. Nemohol by mi niekto poradit ako toto osetrit, popripade nejaky iny script na na vypocet veku uzivatela??


Offline

Správca fóra
Správca fóra
datum narodenia

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 28.04.2009 11:11 | datum narodenia

zadrhel je v tom, ze formular nemoze vyplnat clovek, ktory sa este "nenarodil" => treba zadany rok porovnavat s aktualnym + osetrit aj den a mesiac, aby boli hodnoty v realnom rozmedzi...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Čestný člen
Čestný člen
datum narodenia

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 28.04.2009 13:10 | datum narodenia

Pomocou explode() si rozdel retazec na den, mesiac a rok. Pripadne to ries 3 selectami - prvy 1 - 31, druhy 1-12 a treti rok.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 28.04.2009 16:09 | datum narodenia

Dik za rady..
>Ďuri - prave tymto selectom som sa chcel vyhnut..
>stenley - no trocha som to opravil podla tvojej rady..Rozsiril som to este o podmienku ci je uzivatel starsi ako 18 rokov. Neviem ci je to presne to co si myslel, ale ak je to OK, tak mozes tento prispevok :lock:

Kód:
if (isset($_POST["odoslat"]))
{    // ***** 1. *****

$date1=$_POST["datum"];
$date1= str_replace(".", "", $date1);

if (is_numeric($date1) && (strlen($date1) >= 6) && (strlen($date1) <= 8))
{  // ***** 2. *****

$datumNarodenia=$_POST["datum"];
list($den, $mesiac, $rok) = explode('.', $datumNarodenia);
$datum = mktime(0, 0, 0, $mesiac, $den, $rok);

$dnes1 = strtotime ("now");
$rok1 =(date("Y", $dnes1))-18;

if ($rok > $rok1 or $rok < 1920)
{
   echo "Nespravny rok. ";
  }
elseif ( $den < 1 or $den > 31 )
  {
   echo "Nespravny den.";
  }
elseif ( $mesiac < 1 or $mesiac > 12 )
  {
   echo "Nespravny mesiac.";
  }

else 
{  // **** 3. ****               

$vek = floor((date("Ymd") - date("Ymd", $datum)) / 10000);

if ($vek >= 18)

{ // **** 4. ****

$dodb = "$rok-"."$mesiac-"."$den";

$t = mysql_query("INSERT INTO xxxx (datumnarodenia) 
VALUES('$dodb')");
if (!$t) {
 echo " Prepáčte, ale pri spojovaní došlo ku chybe na strane servera. <br>
Prosím, zopakujte odoslanie Vášho formulára. ";   
}
else
{
 echo " Datum narodenia bol uspešne odoslany. <br>";   
}


}  // **** 4. ****

else
{
 echo " Az budes mat 18, tak sa vrat  !!! <br>";   
}
 
}  // **** 3. ****

}  // ***** 2. *****

else
{
 echo " Nespravny tvar datumu !!! <br>";   
}

}    // ***** 1. *****




Mne to zatial funguje..Ak sa to da napisat aj jednoduchsie(krajsie), mozete to upravit..Rad si necham poradit.. ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
NapísalOffline : 28.04.2009 17:48 | datum narodenia

Ja by som použil regulárny výraz ...


Offline

Správca fóra
Správca fóra
datum narodenia

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 28.04.2009 19:03 | datum narodenia

Ked pouzijem tvoj sposob vypoctu veku, tak by to mohlo vypadat takto, aj s kontrolou datumu:
Kód:
function checkAge($date) {
   $regexp = "^(0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).((19|20)[0-9]{2})$";
   $arrDays = array(1=>31,28,31,30,31,30,31,31,30,31,30,31);
   
   if(ereg($regexp,$date)) {
      list($den,$mesiac,$rok) = explode(".",$date);
      
      $den = $den<10 ? str_replace(0,"",$den) : $den;
      $mesiac = $mesiac<10 ? str_replace(0,"",$mesiac) : $mesiac;
      $arrDays[2] = $rok%4==0 ? 29 : $arrDays[2];
            
      if($den<=$arrDays[$mesiac] && $rok<=date("Y")) {
         $diff = date("Ymd") - date("Ymd",mktime(0,0,0,$mesiac,$den,$rok));
         $vek = floor($diff/10000);
         
         if($vek>=18) {
            return $date;
         }
      }
   }
   return false;
}


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 29.04.2009 11:53 | datum narodenia

> stenley >..Dik za upravu.. Len ta chcem poprosit, ci by si mi nemohol vysvetlit jeden riadok z toho scriptu. Konkretne tento:
Kód:
$arrDays[2] = $rok%4==0 ? 29 : $arrDays[2];

Co to presne znamena? Co znamena $rok%4==0 a co ta 29?
Chapem tomu tak, ze kazdy 4 rok ma 29 dni (cize prechodny rok) ale neviem si nejako "precitat" ten riadok..A este na jednu vec by som sa chcel opytat.. Uz som vo viacerych scriptoch videl pouzivat ?, no neviem co presne to znamena..napr. v tomto riadku:
Kód:
$mesiac = $mesiac<10 ? str_replace(0,"",$mesiac) : $mesiac;

Ten ? znamena vetvenie? Cize nieco ako If a ta : nieco ako else?
PS: Sorry, ak sa pytam hluposti, ale chcem veciam aj trocha porozumiet (nie len bezhlavo opisovat scripty) a aj naucit sa nieco nove.. :oops:


Offline

Správca fóra
Správca fóra
datum narodenia

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 29.04.2009 12:24 | datum narodenia

ano, je to presne tak, ako si to napisal, podmieneny prikaz je vlastne obdoba if-else, len je zapisany na jeden riadok... ak je splnena podmienka pred "?", tak sa vykona cast za "?" (vetva if), v opacnom pripade to, co je za ":" (vetva else).

Kód:
$arrDays[2] = $rok%4==0 ? 29 : $arrDays[2];

kontroluje, ci je zadany rok priestupny... ak ano, nastavi pocet dni pre februar na 29, v opacnom pripade na 28 ($arrDays[2] = 28)


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97 | 97
Napísal autor témyOffline : 29.04.2009 12:36 | datum narodenia

> stenley > Vdaka za vysvetlenie.. Hlavne za tu cast:
Citácia:
ano, je to presne tak, ako si to napisal, podmieneny prikaz je vlastne obdoba if-else, len je zapisany na jeden riadok... ak je splnena podmienka pred "?", tak sa vykona cast za "?" (vetva if), v opacnom pripade to, co je za ":" (vetva else).

Zasa som sa "naucil" nieco nove.. :D
Uz mozes tento prispevok :lock:


Offline

Užívateľ
Užívateľ
datum narodenia

Registrovaný: 28.02.09
Prihlásený: 16.12.15
Príspevky: 241
Témy: 56 | 56
NapísalOffline : 10.01.2010 19:40 | datum narodenia

troska som to upravil ak by niekto potreboval tu mate vypocita to rok zo zadaneho datumu

Kód:
<?php

$date1= "datum_narodenia"; //tu zadaj datum narodenia
$date2= $date1;
$date1= str_replace(".", "", $date1);

if (is_numeric($date1) && (strlen($date1) >= 6) && (strlen($date1) <= 8))
{

$datumNarodenia= $date2;
list($den, $mesiac, $rok) = explode('.', $datumNarodenia);
$datum = mktime(0, 0, 0, $mesiac, $den, $rok);

$dnes1 = strtotime ("now");
$rok1 =(date("Y", $dnes1))-18;             

$vek = floor((date("Ymd") - date("Ymd", $datum)) / 10000);

echo "Tvoj vek je:".$vek;

}
?>


 [ Príspevkov: 10 ] 


datum narodenia



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Urcenie veku z datumu narodenia

v Ostatné programy

4

2076

29.09.2010 8:43

Logik

V tomto fóre nie sú ďalšie neprečítané témy.

Dátum

v HTML, XHTML, XML, CSS

6

317

18.03.2010 21:04

Antuanet

V tomto fóre nie sú ďalšie neprečítané témy.

datum

v PHP, ASP

8

478

22.02.2008 20:41

vl4kn0

V tomto fóre nie sú ďalšie neprečítané témy.

Najblizsi datum

v Databázy

7

524

21.03.2011 20:21

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal: Dátum

v Assembler, C, C++, Pascal, Java

2

139

09.12.2016 14:23

LadyD

V tomto fóre nie sú ďalšie neprečítané témy.

Php Datum

v PHP, ASP

4

107

16.10.2013 18:20

funny102

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

algoritmus - datum

v Ostatné

3

394

16.12.2009 12:43

ac.milan

V tomto fóre nie sú ďalšie neprečítané témy.

Datum XP instalacie

v Operačné systémy Microsoft

1

198

10.10.2008 14:54

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Datum vyroby Cpu

v Intel - Integrated Electronics

2

485

29.01.2011 13:58

OmeGa

V tomto fóre nie sú ďalšie neprečítané témy.

datum => time

v PHP, ASP

2

279

06.02.2008 11:10

mondzo

V tomto fóre nie sú ďalšie neprečítané témy.

datum - zmena formatu

v PHP, ASP

2

192

06.02.2010 14:35

Blackdevil

V tomto fóre nie sú ďalšie neprečítané témy.

Dátum do videa

v Video programy

0

367

05.09.2009 12:25

Phill

V tomto fóre nie sú ďalšie neprečítané témy.

Datum,cas,meniny

v JavaScript, VBScript, Ajax

1

805

28.08.2007 12:43

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Ide o dátum

v PHP, ASP

4

279

02.06.2007 9:04

kmsa

V tomto fóre nie sú ďalšie neprečítané témy.

ORDER BY datum

v PHP, ASP

2

304

05.05.2009 14:23

sedlák

V tomto fóre nie sú ďalšie neprečítané témy.

Dátum - pracovné dni

v PHP, ASP

5

439

09.10.2008 17:35

kmsa



© 2005 - 2017 PCforum, edited by JanoF