Kohana 3.0 - проверка: ошибка, если одно из полей не пустое - PullRequest
1 голос
/ 20 июля 2011

У меня есть четыре поля.Позволяет называть их a, b, c и d.Мне нужно проверить их.

Ошибка, когда:

  • Одно до трех полей не пусто;

Ошибка не когда:

  • Все поля не пусты,
  • Все поля пусты;

Есть ли здесь какое-нибудь удобное решение?Спасибо за совет.

Редактировать:

Только отношения состоят в том, что все четыре переменные имеют префикс event_.Это дает мне event_name, event_description и т.д ..

Edit # 2:

В данный момент у меня есть что-то вроде ...

if (
       !empty($values['event_date'])
    && !empty($values['event_time'])
    && !empty($values['event_name'])
    && !empty($values['event_description'])
) {

Он проверяет, все ли поля заполнены, а затем, если это правда, добавляет событие.

Как я уже говорил, мне нужно отобразить удобную для пользователя ошибку, когда какое-то поле не заполнено (например, пользователь забыл ввести описание).В любом случае, когда все поля заполнены (это означает - все в порядке) или когда поля не заполнены (это означает - пользователь игнорирует добавление события и не хочет добавлять одно) - ошибка не должна отображаться.

Я мог бы написать код с 16 операторами if, но разве нет лучшего способа?:)

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Это не красиво, но если у вас есть что-то уникальное в полях, которые вы хотите проверить (например, «событие _...»), вы можете перебирать массив переменных ($ values, $ _POST и т. Д.) и отметьте только те поля, которые имеют значение.Затем вы можете легко проверить ситуацию «все или ничего».

Вот краткий пример:

$total = 0;
$filled = 0;
foreach($values as $field => $val) {
    if(strpos($field,'event_') === 0) {
        $total++;
        if( ! empty($val)) {
            $filled++;
        }
    }
}
if($filled == 0 OR $total == $filled) {
    //PASS VALIDATION
} else {
    //FAIL VALIDATION
}
0 голосов
/ 26 июля 2011

Существует ли связь между одним из введенных значений и не введенными значениями ?? Вы могли бы просто проанализировать это как пустое значение?

if ( ! isset($post->a) )  $post->a = '';
...