PHP Validate задължително поле + валидиране на възраст в една функция

Имам регистрационна форма със задължително поле за дата на раждане.

    <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');
}

И аз го тествах и изглежда, че работи правилно. Въпреки това се чудех как мога да валидирам двете неща наведнъж. Искам да кажа, проверете дали потребителят е въвел dob и дали възрастта е над 19 години.

Не съм експерт, така че ако знаете по-добър начин да постигнете това, моля, споделете го.

С Най-Добри Пожелания,

Codekmarv


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


Отговори (1)


използвайте това, за да получите възрастта

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

и след това вземете $age стойност и просто я проверете в условието if

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 години. Има ли някаква разлика, ако dob идва от 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
Това, което имам предвид, е, че проверява дали потребителят е избрал датата на раждане, показва грешката, когато не е избран dob, така че тази част е добре; обаче не проверява дали възрастта е над 19, ако е по-малко, трябва да изведе грешката. Вижте тук: връзка - person codekmarv; 16.11.2012
comment
не знам как да проверя стойността в $age, но мога да ви кажа, че върши работата си, получава възрастта. Какво се проваля, ако комбинацията от функциите (двете проверяват дали потребителят е дал dob работи, но другата за проверка дали потребителят е на възраст над 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