检查是否超过18年,仅从1960年开始工作->;1994


Check if over 18 years, only works from 1960->1994

我的表单有一些问题。PHP将检查年龄是否在18岁以下,如果是,此人将收到一条消息,他需要年满18岁。然而,这种形式只适用于1960-1994年出生的人。如果这个人出生于1950年,他会得到一个信息,他还没有18岁。。。

我的代码出了什么问题?

if(empty($_POST["born"])) {$born_error = ('<span class="notutfyllt">*Fødselsår is not filled out</span><br/>');}
else {
        $today = date_create('today');
        $born = date_create("{$_POST['born']}");
        $age = date_diff($today, $born)->y;
        } if ($age >= 18) {
            $born_error = "";
        } else { 
            $born_error = ('<span class="notutfyllt">*You need to be 18 year</span><br/>');
        }

来自表格:

<label for="born">Year of born:</label>
      <input type="text" name="born" id="born" value="'.$born.'">

新版本:

if(empty($_POST["born"])) {$born_error = ('<span class="notutfyllt">*Fødselsår is not filled out</span><br/>');}
    else {
        $bday = new DateTime($_POST["born"]);
        $today = new DateTime('Y');
        $diff = $today->diff($bday);
        if($diff->y>18) {
            $born_error = "";
        }else {
            $born_error = ('<span class="notutfyllt">*You need to be 18 years</span><br/>');
        }
    }

PHP手册中的注释:

只有当时间字符串具有已找到--否则此格式将被识别为HH-MM.

示例:

$born = date_create('1950');
var_dump($born);

生产:

object(DateTime)#1 (3) {
  ["date"]=>
  string(19) "2013-12-05 19:50:00"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Berlin"
}

我想1960年及以上是一个无效的时间,所以它被认为是一年。你必须要求完整的出生日期,或者在脚本中添加"-01-01"(这会给一些人带来错误的结果)。

因此我无法发表评论,我将其添加为答案。

你的代码是正确的,但我猜输入中有问题。你应该检查一下你是如何输入的。

但我用3,4的值测试了你的代码,它的工作原理如下。

$born = date_create("1950-01-01");  //$age is 63
$born = date_create("1960-01-01");  //$age is 53
$born = date_create("1994-01-01");  //$age is 19

因此,您必须检查输入,并且输入必须在format accepted by strtotime()中。

最后,我建议使用日期选择器或类似的东西来限制用户输入错误的值。

新的DateTime类将拯救您。

<?php
$date = DateTime::createFromFormat('Y', '1950'); // Pass your $_POST['born']
$cdate = new DateTime();
$age= $cdate->format('Y') - $date->format('Y');
if($age>18)
{
echo "You are above 18 years. You are allowed";
}
else
{
echo "Sorry you don't have access";
}

输出:

您已年满18岁。你被允许