鉴于以下变量:
$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.';
答案 0 :(得分:1)
尝试:
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.';
}
答案 1 :(得分:1)
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
}
答案 2 :(得分:1)
让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
。
最后使用我在学校学到的那些代数。
答案 3 :(得分:0)
我确定$fields
来自哪里,但以下可能会解决问题:
if (!(isset($field1) && isset($field2) && isset($field3)) || !(isset($field1) && isset($field2) && isset($field3) && isset($field4)){
//Set the error
}
答案 4 :(得分:0)
我偶尔会做类似以下的简单验证,比如
$fields = array('field1', 'field2', 'field3', 'field4', 'field5');
foreach($fields as $field) {
if(!isset($_POST[$field]) || strlen(trim($_POST[$field])) == 0) {
// set error message
}
}