2015-02-21 5 views
0

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

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

ответ

1

Comparaison операторы работают с 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'])) 
+0

Не должен ли это будет 'если ($ dateObj <$ ageLimit)' – Cyclonecode

+0

Нету, потому что если день рождения более свежо, что 13 лет назад это означает, что пользователь слишком молод. –

+0

Вы правы, я просто смущен извиняюсь =) Возможно, пришло время ложиться спать. – Cyclonecode

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 
} 

Demo

+0

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

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

cool, это работает, но я все еще не могу получить его для вывода «Введите свой день рождения», когда дата не выбрана –

Смежные вопросы