2009-11-28 4 views
8

Je me demandais simplement si je pouvais le faire pour valider qu'un utilisateur a entré une date de plus de 18 ans?Valider si l'âge est supérieur à 18 ans

//Validate for users over 18 only 
function time($then, $min) 
{ 
$then = strtotime('March 23, 1988'); 
//The age to be over, over +18 
$min = strtotime('+18 years', $then); 
echo $min; 
if(time() < $min) 
{ 
die('Not 18'); 
} 
} 

Juste sommes tombés sur cette fonction date_diff: http://www.php.net/manual/en/function.date-diff.php apparence, encore plus prometteur.

+1

J'espère que ce n'est pas pour quelque chose de la plus haute sécurité! ;-) Je suis sûr que tous les enfants qui essaient d'accéder au contenu Adulte entreront leur âge correct. – scunliffe

+0

Non, je suis en train d'apprendre à propos de PHP, c'est probablement plus comme aucune sécurité. – Newb

Répondre

19

Pourquoi pas? Le seul problème pour moi, c'est l'interface utilisateur - comment vous envoyez le message d'erreur avec élégance à l'utilisateur. Sur une autre note, votre fonction pourrait ne pas fonctionner correctement car vous n'avez pas pris un bon anniversaire (vous utilisez un anniversaire fixe). Vous devez changer '23 Mars, 1988 à $, alors

//Validate for users over 18 only 
function validateAge($then, $min) 
{ 
    // $then will first be a string-date 
    $then = strtotime($then); 
    //The age to be over, over +18 
    $min = strtotime('+18 years', $then); 
    echo $min; 
    if(time() < $min) { 
     die('Not 18'); 
    } 
} 

Ou vous pouvez:

// validate birthday 
function validateAge($birthday, $age = 18) 
{ 
    // $birthday can be UNIX_TIMESTAMP or just a string-date. 
    if(is_string($birthday)) { 
     $birthday = strtotime($birthday); 
    } 

    // check 
    // 31536000 is the number of seconds in a 365 days year. 
    if(time() - $birthday < $age * 31536000) { 
     return false; 
    } 

    return true; 
} 
+0

Je faisais juste ça mr. éditeur. : P – William

+0

haha ​​suppose que j'étais plus rapide alors? ma faute. – mauris

+8

Aussi, rappelez-vous qu'une année est techniquement 365.242199 jours dans une année. Donc, vous devriez multiplier par 31556926 au lieu de 31536000. En outre, Google est vraiment gentil à propos de ces types de calculs, il suffit de demander Google "1 ans en secondes" :) – William

2
if(strtotime("1988/03/23") < (time() - (18 * 60 * 60 * 24 * 365))) { 
    print "yes"; 
} else { 
    print "no"; 
} 

... sans tenir compte de sauts années mais

+0

C'est incroyable tant de façons d'atteindre le même objectif. – Newb

11

Voici une procédure simplifiée extrait de ce que j'ai utilisé pour un système bancaire à Toronto, et cela a toujours fonctionné parfaitement, en tenant compte des années bissextiles de 366 jours.

/* $dob is date of birth in format 1980-02-21 or 21 Feb 1980 
* time() is current server unixtime 
* We convert $dob into unixtime, add 18 years, and check it against server's 
* current time to validate age of under 18 
*/ 

if (time() < strtotime('+18 years', strtotime($dob))) { 
    echo 'Client is under 18 years of age.'; 
    exit; 
} 
-1

fichier Php

if (isset($_POST['bdate'])){ 
    $bdate = $_POST['bdate']; 
    $age = (date("Y-m-d") - $bdate); 



} //if age if 17 or younger error msg 
if ($age < 17) { 
    echo "Must 18 or older."; 
} 
else{ //if age is 120 or greather error msg 
    if ($age > 120) { 
     echo "Real age please."; 
    } 
    else{ 
     echo "$age"; 
    } 
} 

Code HTML:

<form action="" method="POST"> 

    <p><label>Birth Date &nbsp;&nbsp;: </label> 
    <input id="bdate" type="date" name="bdate" required placeholder="" /></p> 
    <input class="btn register" type="submit" name="submit" value="Register" /> 
</form> 
2

Je pense qu'il est préférable pour cela en utilisant la classe DateTime.

$bday = new DateTime("22-10-1993"); 
$bday->add(new DateInterval("P18Y")); //adds time interval of 18 years to bday 
//compare the added years to the current date 
if($bday < new DateTime()){ 
    echo "over 18"; 
}else{ 
    echo "below 18"; 
} 

DateTime :: diff peut également être utilisé pour comparer la date à la date actuelle.

$today = new DateTime(date("Y-m-d")); 
$bday = new DateTime("22-10-1993"); 
$interval = $today->diff($bday); 
if(intval($interval->y) > 18){ 
    echo "older than 18"; 
}else{ 
    echo "younger than 18"; 
} 

N/B: 1) pour la deuxième méthode, si $ bday est supérieur à $ aujourd'hui de 18 ans ou plus, il retournera plus, alors assurez-vous que la date est entrée à moins de $ aujourd'hui . 2) DateTime fonctionne sur php 5.2.0 et au-dessus

Questions connexes