Kohana 3.0 - Проверить: ошибка, если одно из полей не пусто

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

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

  • Поля от одного до трех не пусты;

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

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

Любое изящное решение здесь? Спасибо в совете.

Изменить:

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

Изменить №2:

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

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

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

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

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


person daGrevis    schedule 20.07.2011    source источник
comment
Извините, нам нужно увидеть больше кода, чтобы иметь возможность помочь.. Каково хотя бы сообщение об ошибке?   -  person mdskinner    schedule 27.07.2011
comment
@mdskinner Ха, ха. Я думаю, что вы не поняли мою проблему. Мне нужно показать удобную для пользователя ошибку, когда... выше условия. Мне могло бы понравиться 16 утверждений «если», но я ищу какой-нибудь аккуратный способ использования класса Validate.   -  person daGrevis    schedule 27.07.2011


Ответы (2)


Это некрасиво, но пока у вас есть что-то уникальное в полях, которые вы хотите проверить (например, «event_...»), вы можете пройтись по массиву переменных ($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
}
person dscone    schedule 27.07.2011

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

if ( ! isset($post->a) )  $post->a = '';
person mdskinner    schedule 26.07.2011
comment
Что вы имели в виду под отношениями? - person daGrevis; 26.07.2011
comment
Хорошо, они как-то зависят друг от друга (если $a != '' $e == $b)? Можете ли вы опубликовать некоторые из вашей фактической разметки формы и сообщение об ошибке, которое вы получаете. Наряду с логикой контроллера и любыми определениями проверки в соответствующей модели. (только соответствующие фрагменты) - person mdskinner; 27.07.2011
comment
Отредактировал снова... не могу объяснить лучше. - person daGrevis; 27.07.2011