Проверка возраста на PHP

0

Я смотрел на многие сообщения здесь, и я все еще не могу понять это.

Я пытаюсь проверить, что кто-то старше 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>
Теги:
date

3 ответа

1
Лучший ответ

Операторы Comparaison работают с DateTime, см. Ответ здесь. Так что что-то вроде этого должно работать

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

EDIT за комментарий

Заменить 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']))
  • 0
    Не должно ли это быть, if($dateObj < $ageLimit)
  • 0
    Нет, потому что, если день рождения более поздний, чем 13 лет назад, это означает, что пользователь слишком молод.
Показать ещё 6 комментариев
1

У вас несколько ошибок

  1. "13 лет" не является допустимым значением для DateTime()
  2. Дата в формате "Y/m/d" не является допустимым форматом для DateTime()
  3. $checkDate - это объект DateInterval и не сопоставим с объектом DateTime

Вы можете исправить это и упростить свой код, сравнив объекты DateTime которые сопоставимы:

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

демонстрация

  • 0
    классный мужчина спасибо. только одна вещь, хотя. Я не могу видеть, ввели ли они дату или нет. Я хотел бы дать им сообщение о том, что, пожалуйста, введите дату. но это выглядит как возраст младше 13 лет, когда день рождения не указан, а строка - мм / дд / гггг
0

Может быть проще использовать 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.';
}
  • 0
    круто, это работает, но я все еще не могу получить его, чтобы вывести «Введите свой день рождения», когда дата не выбрана

Ещё вопросы

Сообщество Overcoder
Наверх
Меню