2016-03-23 5 views
0

Wenn ein Benutzer versucht, sich mit meiner Site zu registrieren, muss ich sicherstellen, dass sie alt genug sind. Ich versuche dies mit der getdate() Funktion zu tun.Wie kann ich getdate() verwenden, um das Alter eines Benutzers zu überprüfen?

Ich verstehe, was getdate() tut, aber ich habe Mühe zu verstehen, wie man es richtig für diesen Zweck verwendet.

<?php 
$fn = $_POST["fullname"]; 
$un = $_POST["username"]; 
$pw = $_POST["password"]; 
$dob = $_POST["dayofbirth"]; 
$mob = $_POST["monthofbirth"]; 
$yob = $_POST["yearofbirth"]; 

$date = getdate(); 

if ($yob =$yob>= $date["year"]-16) 
{ 
    echo "Too young to register!"; 
} 
elseif ($yob <=1899) 
{ 
    echo "Don't be silly, you are not that old!"; 
} 
else 
{ 
    echo "<h1>Thank you for registering with us!</h1>"; 
    echo "<p> You have successfully registered with these details: 
      <br>Your full name :$fn<br> Username: $un 
      <br>Date of birth: $dob $mob $yob</p>"; 
} 
?> 
+3

Wenn Sie nicht auch Tag \ Monat überprüfen, wird dies nicht korrekt sein –

Antwort

3

Versuche:

$registration = new DateTime(implode('-', array($yob, $mob, $dob))); 
$now = new DateTime(); 

var_dump($now->diff($registration)->y); 

Dies gibt Ihnen das tatsächliche Alter, nehmen Monate, Tage und die Schaltjahre berücksichtigt.

DateTime Class Manual

0

Wenn Sie diese if ($yob =$yob>= $date["year"]-16) zu if ($yob >= $date["year"]-16) korrigieren, dann wird dies tun, was Sie erwartet, dass es zu und es wird einige der Zeit zu arbeiten. Das Problem ist, dass abhängig davon, wann jemand Geburtstag im Jahr hat, im Vergleich zum aktuellen Datum, nur das Jahr so ​​subtrahieren wird oft ein falsches Ergebnis geben.

Ein besserer Weg wäre, das Alter mit der DateTime::diff Methode zu berechnen. Dies sollte Ihnen das genaue Alter der Person geben.

$age = date_create("$yob-$mob-$dob")->diff(new DateTime()); 

Dann können Sie das Jahr Eigenschaft des resultierenden DateInterval Objekt vergleichen, das Alter zu überprüfen.

if ($age->y < 16) { 
    echo "Too young to register!"; 
} elseif ($age->y > 117) { 
    echo "Don't be silly, you are not that old!"; 
} else { ... 
Verwandte Themen