【问题标题】:Verifying age on PHP在 PHP 上验证年龄
【发布时间】:2015-02-21 00:28:47
【问题描述】:

我看了很多帖子,还是不明白。

我正在尝试在某人注册我的网站之前验证他们是否年满 13 岁。这就是我目前所拥有的

<?php
if (is_string($_POST['birthday']) && $_POST['birthday'] != 'mm/dd/yyyy')
{
    $dateObj = new DateTime($_POST['birthday']);
    $ageLimit = new DateTime('13 years');
    $now = new DateTime(date("Y/m/d"));
    $checkDate = $now->diff($ageLimit);;
    if($checkDate > $dateObj)
    {
        $errors[]='You must be atleast 13 years old to join.';
    }
    else
    {
        $bday = mysqli_real_escape_string($db,$_POST['birthday']);
    }
}
else
{
    $errors[]= 'Enter your birthday.';
}

代码将始终运行到

$bday = mysqli_real_escape_string($db,$_POST['birthday']);}

无论在日期字段中输入什么,结果始终为 1。

谁能帮我解决这个问题?这个我自己搞不定。

<b>Birth Date</b><br><input type="date" name="birthday"
value=<?php if(isset($_POST['birthday']))echo $_POST['birthday'];?>><br>

【问题讨论】:

    标签: php date verify


    【解决方案1】:

    比较运算符使用DateTime,请参阅答案here。 所以这样的事情应该可以工作

    $dateObj=new DateTime($_POST['birthday']);
    $ageLimit=new DateTime('-13 years');
    if($dateObj > $ageLimit){
       //TOO YOUNG
    }
    

    编辑每条评论

    替换 if(isset($_POST['birthday']))echo $_POST['birthday'];

    if(isset($_POST['birthday'])) { 
      echo $_POST['birthday']; 
    } else { 
      echo 'mm/dd/yyyy';
    }
    

    或者改变

    if (is_string($_POST['birthday']) && $_POST['birthday'] != 'mm/dd/yyyy')
    

      if (!empty($_POST['birthday']) && is_string($_POST['birthday']))
    

    【讨论】:

    • 不应该是if($dateObj &lt; $ageLimit)
    • 不,因为如果生日比 13 年前更近,则意味着用户太年轻。
    • 你说得对,我只是糊涂了抱歉 =) 也许该睡觉了。
    • 是的,我想出了那部分,但如果他们没有输入,我想输出一条消息。我的意思是现在的代码很好。我可以使用它,但我希望它更准确
    • 它仍然通过并使其成为能够发布的变量。 IDK 如果我将其设置为 null 而不是 mm/dd/yyyy 会出现什么问题并检查它会起作用吗?
    【解决方案2】:

    你有几个错误

    1. “13 年”不是DateTime() 的有效值
    2. “Y/m/d”格式的日期不是DateTime() 的有效格式
    3. $checkDateDateInterval 对象,不能与 DateTime 对象进行比较

    您可以通过比较可比较的 DateTime 对象来解决此问题并简化代码:

    $birthday = new DateTime($_POST['birthday']);
    $ageLimit = new DateTime('-13 years');
    if ($birthday < $ageLimit) {
        // they're old enough
    }
    else {
         // too young
    } 
    

    Demo

    【讨论】:

    • 很酷的人,谢谢。不过只有一件事。我看不到他们是否输入了日期。我想给他们留言说请输入日期。但是当没有输入生日并且字符串为 mm/dd/yyyy 时显示为小于 13 岁
    【解决方案3】:

    使用 strtotime 计算日期差异可能更容易。数字越高的人越年轻。因此,如果人们的年龄高于最低年龄,他们就不够老。

    if(is_string($_POST['birthday'])&&$_POST['birthday']!='mm/dd/yyyy') {
       $minAge = strtotime("-13 years");
       $dateObject = strtotime($_POST['birthday']);
    
       if($dateObject > $minAge) {
          $errors[]= 'You must be atleast 13 years old to join.';
       }
    
    } else {
        $errors[]='Enter your birthday.';
    }
    

    【讨论】:

    • 很酷,这是有效的,但是当没有选择日期时,我仍然无法让它输出“输入你的生日”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多