Вывод логических операторов

Учитывая следующие переменные:

$field1;
$field2;
$field3;
$field4;
$field5;

Как я могу использовать логические операторы, чтобы пользователь мог заполнить любое поле: 1,2,3 ИЛИ любое поле 1, 2, 4, 5. Если пользователь не выполняет одно из следующих действий, то я хочу дать ошибку поля не заполнены.

Я пытался:

if ((!$field1 | !$field2 |!$field3) | (!$field1 | !$field2 |!$field4|!$field5)) $errors[] = 'You did not complete all of the required fields.';
5 ответов

if (! // Exactly 1,2,3 are filled in (not 4, 5) (!empty($field1) && !empty($field2) && !empty($field3) && empty($field4) && empty($field5)) // or Exactly 1,2,4,5 are filled in (not 3) && !(!empty($field1) && !empty($field2) && !empty($field4) && !empty($field5) && empty($field3))
) { // print error
}


Пусть a = not empty $field1, b = not empty $field2,..., e = not empty $field5

Вы хотите

(a && b && c) || (a && b && d && e)
= (a && b) && ( c || (d && e))

В php:

if(!empty($field1) && !empty($field2) && ( !empty($field3) || (!empty($field4) && !empty($field5))
) { // process
} else { // error
}

Если вы считаете 0 как действительное значение, используйте isset вместо empty.

Наконец, воспользуемся той алгеброй, которую я изучил в школе.


Пытаться:

if (!empty($field1) && !empty($field2) && !empty($field3)) { //process
} else if (!empty($field1) && !empty($field2) && !empty($field4) && !empty($field5)) { //process
} else { $errors[] = 'You did not complete all of the required fields.';
}

Или, если для данной опции не заполнены дополнительные поля:

if (!empty($field1) && !empty($field2) && !empty($field3) && empty($field4) && empty($field5)) { //process
} else if (!empty($field1) && !empty($field2) && !empty($field4) && !empty($field5) && empty($field3)) { //process
} else { $errors[] = 'You did not complete all of the required fields.';
}


Я иногда делаю что-то вроде следующего для простых проверок, таких как это

$fields = array('field1', 'field2', 'field3', 'field4', 'field5');
foreach($fields as $field) { if(!isset($_POST[$field]) || strlen(trim($_POST[$field])) == 0) { // set error message }
}


Я уверен, откуда начинаются $fields, но следующее может сделать трюк:

if (!(isset($field1) && isset($field2) && isset($field3)) || !(isset($field1) && isset($field2) && isset($field3) && isset($field4)){ //Set the error
}

licensed under cc by-sa 3.0 with attribution.