Логические операторы выпускают - PullRequest
0 голосов
/ 21 марта 2012

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

$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 ]

1 голос
/ 21 марта 2012

Let 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.

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

1 голос
/ 21 марта 2012
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
}
1 голос
/ 21 марта 2012

Попробуйте:

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.';
}
0 голосов
/ 21 марта 2012

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

$fields = array('field1', 'field2', 'field3', 'field4', 'field5');

foreach($fields as $field) {
    if(!isset($_POST[$field]) || strlen(trim($_POST[$field])) == 0) {
        // set error message
    }
}
0 голосов
/ 21 марта 2012

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

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