检查是否超过18年,仅适用于1960-> 1994

时间:2013-12-05 10:42:03

标签: php forms

我的表格遇到了一些麻烦。 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/>');
        }
    }

3 个答案:

答案 0 :(得分:2)

来自PHP manual

的注释
  

“年(仅年)”格式仅在时间字符串有效时才有效   已经找到 - 否则这种格式被认为是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"(这会给某些人带来错误的结果)。

答案 1 :(得分:1)

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

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

但是我用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()

最后,我建议使用datepicker或类似的内容来限制用户输入错误的值。

答案 2 :(得分:1)

新的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岁。你被允许