PHP if / else和AND / OR来检查强制和可选字段

时间:2013-08-06 10:50:57

标签: php if-statement operators

我的表单中有八个输入字段,我需要检查它们是否为空。其中四个是文本字段,另外四个是列表框。当用户提交表单时,需要填写四个文本框。第五个字段是是/否选择。如果此字段中的选择是"否",则其余三个可以留空。但是,如果第五个字段中的选择是"是"然后还必须使用列表框选择最后三个。

让我们拨打前四个(文本框)" mandatory-text1"," mandatory-text2"," mandatory-text3"," mandatory-text4",是/否选择列表框"是 - 否"和可选的选择" a"," b"和" c"。

SO:

如果mandatory-text1,或mandatory-text2,或mandatory-text3或mandatory-text4为空,则处理php将中止。

但是,如果强制性文本1,强制性文本2,强制性文本3和强制性文本4都已填写,则下一项检查是查看是 - 否包含"是"或者"否"。

  • 如果它包含No,则必须保留a,b和c 空白。
  • 如果它包含是,那么a,b和c(列表框)必须是 必然会被选中。

凭借我对PHP的熟练程度,我已经能够达到这个目标:

    if ((mandatory-text1 || mandatory-text2 || mandatory-text3 == "") OR (yes-no == "Yes" AND (!(a || b || c  == ""))) {
    echo "blah" ;
    exit();
    }
    else {
    //do some stuff
    }

我还没有对“做一些事情”进行编码'部分原因是因为当我尝试这段代码时,我得到的是“等等”。即使填写了所有文本字段,也可以是消息,是 - 否是"是"已经选择了a,b和c。

我先用一个简单的" ||"对于所有的领域,这工作正常 - 即使即使其中一个字段留空,我得到了'#blah'信息。我也尝试过检查yes-no和a,b,c,这也很正常,即如果a,b,c字段是空白的话,如果是 - 否则我得到了等等。

但在进行下一步之前,我需要满足所有条件。我在这里读到的帖子把我带到了现在的舞台。但是没有一个达到我想要的项目水平。

任何有关逻辑的提示都将受到赞赏!

4 个答案:

答案 0 :(得分:1)

首先,你应该在变量名之前使用$

其次, mandatory-text1||mandatory-text2||mandatory-text3=="" 是错误的逻辑。它应该是$mandatory-text1=""||$mandatory-text2==""|| ...

它的工作原理是因为if(mandatory-text1)单独意味着如果定义了mandatory-text1而不是空或空字符串,那么在这种情况下单独$mandatory-text1||$mandatory-text2||$mandatory-text3就足够了

if ((mandatory-text1 || mandatory-text2 || mandatory-text3 == "") OR (yes-no == "Yes" AND (!(a || b || c  == ""))) {
echo "blah" ;
exit();
}
else {
//do some stuff
}
对于|| b || c

相同

答案 1 :(得分:1)

(mandatory-text1 || mandatory-text2 || mandatory-text3 == "")

这不符合你的想象。这说:

如果强制性文本1不为空或强制性2文本不为空或强制性3文本等于“”。

尝试:

(mandatory-text1 == "" || mandatory-text2 == "" || mandatory-text3 == "")

答案 2 :(得分:1)

您可以使用每种字段类型的函数或代码块以更易读的方式重新设计控件,例如:

<?php


function checkFields( $data )
{
    // List of field to check
    $fields = array( 'mandatory-text1', 'mandatory-text2', 'mandatory-text3', 'mandatory-text4', 'a', 'b', 'c' );

    foreach ($fields as $field )
    {
        switch( $field )
        {
            case 'mandatory-text1':
            case 'mandatory-text2':
            case 'mandatory-text3':
            case 'mandatory-text4':
                if ( $data[$field] == '' )
                {
                     return false;
                }
            break;


            case 'a':
            case 'b':
            case 'c':
                if ( $data['yes-no'] == 'yes' && $data[$field] == '' )
                {
                    return false;
                }
                elseif( $data['yes-no'] == 'no' && $data[$field] != '' )
                {
                    return false;
                }
            break;
        }
    }

    // If we have not returned false so far, then all is clear
    return true;
}

// Usage :
if( checkFields( $_POST ) )
{
    // every thing is ok
}
else
{
    // bad submission
}
?>

你应该在这里避免两件事:

  • 长和/或陈述
  • 使用smae控件重复自我

答案 3 :(得分:0)

如果我理解正确,这样的事情应该有效。不要在变量名中使用破折号。

if ($mandatory1 && $mandatory2 && $mandatory3 && $mandatory4)
{
    if ($choice == "Y" && $a && $b && $c)
    {
        // do whatever
    }
    elseif ($choice == "N" && !$a && !$b && !$c)
    {
        // do something else
    }
}
else
{
    // submission incorrect
}