2009-11-28 36 views
8

Chỉ cần tự hỏi, tôi có thể thực hiện việc này để xác thực rằng người dùng đã nhập ngày trên 18 tuổi không?Xác thực nếu độ tuổi trên 18 tuổi

//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'); 
} 
} 

Chỉ cần stumbled trên chức năng này date_diff: http://www.php.net/manual/en/function.date-diff.php vẻ, thậm chí hứa hẹn hơn.

+1

Tôi hy vọng đây không phải là thứ bảo mật hàng đầu! ;-) Tôi chắc chắn rằng tất cả trẻ em đang cố gắng truy cập nội dung Người lớn sẽ nhập đúng độ tuổi của chúng. – scunliffe

+0

Không, tôi chỉ học về php, nó có lẽ giống như không có bảo mật nào cả. – Newb

Trả lời

19

Tại sao không? Vấn đề duy nhất đối với tôi, là giao diện người dùng - cách bạn gửi thông báo lỗi một cách tao nhã cho người dùng.

Lưu ý khác, chức năng của bạn có thể không hoạt động bình thường khi bạn không uống đúng ngày sinh nhật (bạn đang sử dụng ngày sinh cố định). Bạn nên thay đổi '23 tháng ba năm 1988' đến $ sau đó

//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'); 
    } 
} 

Hoặc bạn có thể:

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

Tôi chỉ đang làm điều đó mr. biên tập viên. : P – William

+0

haha ​​đoán tôi đã nhanh hơn rồi? lỗi của tôi. – mauris

+8

Ngoài ra, hãy nhớ rằng một năm là kỹ thuật 365.242199 ngày trong một năm. Vì vậy, bạn nên nhân với 31556926 thay vì 31536000. Ngoài ra, Google là thực sự tốt đẹp về các loại tính toán, chỉ cần hỏi Google "1 năm trong giây" :) – William

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

... không chiếm nhảy năm tuy nhiên

+0

Thật tuyệt vời, rất nhiều cách để đạt được cùng một mục tiêu. – Newb

11

Đây là một đơn giản trích xuất từ ​​những gì tôi sử dụng cho một hệ thống ngân hàng ở Toronto, và điều này luôn luôn làm việc một cách hoàn hảo, tính đến những năm nhuận trong 366 ngày.

/* $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

tập 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"; 
    } 
} 

HTML code:

<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

Tôi nghĩ rằng cách tốt nhất là sử dụng lớp DateTime cho việc này.

$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 cũng có thể được sử dụng để so sánh ngày với ngày hiện tại.

$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) đối với phương pháp thứ hai, nếu $ bday lớn hơn $ ngày hôm nay bởi 18 năm trở lên, nó sẽ trở lại cũ, do đó hãy chắc chắn rằng ngày vào là ít hơn $ ngày nay . 2) DateTime hoạt động trên php 5.2.0 trở lên

Các vấn đề liên quan