【问题标题】:Logical operators issue逻辑运算符问题
【发布时间】:2012-03-21 02:17:58
【问题描述】:

给定以下变量:

$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.';

【问题讨论】:

  • | 运算符是bitwise OR——不是你想要的。使用|| 进行逻辑或。

标签: php logical-operators


【解决方案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
}

【讨论】:

  • 这是否也使得如果用户仅填写字段 1 会报错?
  • @Anonymous 是的,这就是我对您的要求的理解。
  • @Anonymous 非常好,很高兴为您提供帮助。
【解决方案2】:

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】:

    试试:

    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.';
    }
    

    【讨论】:

      【解决方案4】:

      我确定 $fields 来自哪里,但以下可能会解决问题:

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

      【讨论】:

        【解决方案5】:

        我偶尔会为诸如此类的简单验证执行以下操作

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-21
          • 1970-01-01
          • 2013-11-01
          • 1970-01-01
          • 2023-02-16
          • 1970-01-01
          • 2021-12-01
          相关资源
          最近更新 更多