date — Проверка возраста на переполнение стека

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

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

0

Решение

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

$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']))
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
}

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

1

Может быть проще использовать 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
По вопросам рекламы [email protected]