Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 28.04.2009 11:06

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: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 28.04.2009 11:11

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...







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

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

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 28.04.2009 13:10

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
Príspevok Napísal autor témyOffline : 28.04.2009 16:09

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: 3984
Témy: 96
Príspevok NapísalOffline : 28.04.2009 17:48

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: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 28.04.2009 19:03

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;
}







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
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
Príspevok Napísal autor témyOffline : 29.04.2009 11:53

> 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: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 29.04.2009 12:24

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)







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
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
Príspevok Napísal autor témyOffline : 29.04.2009 12:36

> 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ý: 19.02.18
Príspevky: 241
Témy: 56
Príspevok NapísalOffline : 10.01.2010 19:40

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;

}
?>


Odpovedať na tému [ Príspevkov: 10 ] 


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

2434

29.09.2010 8:43

Logik Zobrazenie posledných príspevkov

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

v HTML, XHTML, XML, CSS

6

533

18.03.2010 21:04

Antuanet Zobrazenie posledných príspevkov

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

v PHP, ASP

8

689

22.02.2008 20:41

vl4kn0 Zobrazenie posledných príspevkov

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

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

2

346

09.12.2016 14:23

LadyD Zobrazenie posledných príspevkov

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

v PHP, ASP

4

297

16.10.2013 18:20

funny102 Zobrazenie posledných príspevkov

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

v Ostatné

3

557

16.12.2009 12:43

ac.milan Zobrazenie posledných príspevkov

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

v Databázy

7

689

21.03.2011 20:21

stenley Zobrazenie posledných príspevkov

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

v Operačné systémy Microsoft

1

366

10.10.2008 14:54

shiro Zobrazenie posledných príspevkov

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

v Intel - Integrated Electronics

2

770

29.01.2011 13:58

OmeGa Zobrazenie posledných príspevkov

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

v PHP, ASP

2

494

06.02.2008 11:10

mondzo Zobrazenie posledných príspevkov

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

v PHP, ASP

2

343

06.02.2010 14:35

Blackdevil Zobrazenie posledných príspevkov

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

v Video programy

0

551

05.09.2009 12:25

Phill Zobrazenie posledných príspevkov

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

v JavaScript, VBScript, Ajax

1

1001

28.08.2007 12:43

stenley Zobrazenie posledných príspevkov

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

v PHP, ASP

4

429

02.06.2007 9:04

kmsa Zobrazenie posledných príspevkov

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

v PHP, ASP

2

494

05.05.2009 14:23

sedlák Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Dátum - pracovné dni

v PHP, ASP

5

629

09.10.2008 17:35

kmsa Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra