PHP Проверка обязательного поля + проверка возраста в одной функции

У меня есть регистрационная форма с обязательным полем даты рождения.

    <tr>
      <td><span class="required">*</span> <?php echo $entry_dob; ?></td>
      <td><input type="text" id="dob" name="dob" value="<?php echo $dob; ?>"   /><p id="age"></p>
        <?php if ($error_dob) { ?>
        <span class="error"><?php echo $error_dob; ?></span>
        <?php } ?>

Итак, в моем файле контроллера php [я использую программное обеспечение, закодированное в MVC], у меня есть следующая функция, чтобы сделать поле обязательным:

 if ((strlen(utf8_decode($this->request->post['dob'])) < 3) || (strlen(utf8_decode($this->request->post['dob'])) > 32)) {
        $this->error['dob'] = $this->language->get('error_dob');
    }

Мне также нужно проверить, не старше ли пользователя 19 лет. Если это не так, будет отображаться ошибка. Для этого я использую следующую функцию в том же файле контроллера php:

$allowed_age = 19;
$bdate = strtotime($_REQUEST['dob']);
$age = (time()-$bdate)/31536000;
if($age < $allowed_age) {
 $this->error['dob'] = $this->language->get('error_dob');
}

И я проверил его, и он, кажется, работает правильно. Однако мне было интересно, как я могу проверить две вещи одновременно. Я имею в виду, проверьте, ввел ли пользователь док, и если возраст старше 19 лет.

Я не эксперт, поэтому, если вы знаете лучший способ добиться этого, поделитесь им.

С уважением,

Кодекмарв


person codekmarv    schedule 16.11.2012    source источник


Ответы (1)


используйте это, чтобы получить возраст

$age = floor( (strtotime(date('Y-m-d')) - strtotime($this->request->post['dob'])) / 31556926);

и после этого возьмите значение $age и просто проверьте его, если условие

if (((strlen(utf8_decode($this->request->post['dob'])) < 3) || (strlen(utf8_decode($this->request->post['dob'])) > 32)) 
&& $age < 19) {
    $this->error['dob'] = $this->language->get('error_dob');
}

Он проверит, ввел ли пользователь значение, а возраст больше 19 лет.

Вы должны использовать оператор && для проверки нескольких условий.

person Yogesh Suthar    schedule 16.11.2012
comment
Большое спасибо. Я действительно ценю твою помощь. Я пытался использовать ваш код, но он не может проверить, старше ли возраст 19 лет. Есть ли какая-то разница, если доб исходит от ui datepicker? - person codekmarv; 16.11.2012
comment
@codekmarv можешь объяснить it's failing to validate if the age is older than 19.. Попробуйте напечатать значение $age и когда оно должно выдавать ошибку, если возраст больше 19 или меньше 19 лет. - person Yogesh Suthar; 16.11.2012
comment
Я имею в виду, что он проверяет, выбрал ли пользователь дату рождения, и показывает ошибку, когда не было выбрано ни одного дня рождения, так что эта часть в порядке; однако он не проверяет, больше ли возраст 19 лет, если он меньше, он должен выдать ошибку. См. здесь: ссылка - person codekmarv; 16.11.2012
comment
не уверен, как проверить значение в $age, но я могу сказать вам, что он выполняет свою работу, он получает возраст. Что не так, если комбинация функций (одна из двух проверяет, дал ли пользователь доб, но другая, чтобы проверить, не работает ли пользователь старше 19 лет). Если я разделю их, они оба работают. - person codekmarv; 16.11.2012
comment
так что здесь должно быть что-то, чего нам не хватает, и эта часть php на самом деле для меня новая, поэтому я не в курсе if (((strlen(utf8_decode($this->request->post['dob'])) < 3) || (strlen(utf8_decode($this->request->post['dob'])) > 32)) && $age > 19) { $this->error['dob'] = $this->language->get('error_dob'); } - person codekmarv; 16.11.2012
comment
сохранить значение $age в переменной и показать его, точно так же, как вы делаете это для отображения ошибки. - person Yogesh Suthar; 16.11.2012
comment
Я нашел проблему, условие должно быть $age < 19, и я поставил $age > 19. Теперь это сработает. - person Yogesh Suthar; 16.11.2012
comment
Я действительно ценю твою помощь. Все равно не повезло. Я не понимаю, почему это не работает, потому что, если я использую вашу функцию для получения возраста и следующую проверку отдельно, она работает: if($age < 19) { $this->error['dob'] = $this->language->get('error_dob'); } - person codekmarv; 16.11.2012
comment
сделать это || $age < 19 вместо && $age < 19. Он должен работать. - person Yogesh Suthar; 16.11.2012
comment
Замечательный! Оно работает. Большое спасибо!! Я очень ценю вашу помощь и время. Если вы когда-нибудь приедете в Коста-Рику, я приглашу вас на чашку кофе :) Теперь он намного лучше, намного чище, чем тот, что у меня был. - person codekmarv; 16.11.2012