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


PHP if/else and AND/OR to check mandatory and optional fields

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

让我们将前四个(文本框)称为"强制文本1"、"强制文本2"、"强制性文本3"answers"强制文本4",是/否选择列表框称为"是-否",可选选择称为"a"、"b"answers"c"。

所以:

如果强制文本1、强制文本2、强制文本3或强制文本4为空,则处理php将中止。

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

  • 如果包含"否",则必须保留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
    }

我还没有对"做一些事情"部分进行编码,因为当我尝试这个代码时,即使所有的文本字段都填写好了,yes no是"yes",并且a、b和c已经被选中,我也会收到"blah"消息。

我先用一个简单的"||"来表示所有字段,效果很好——也就是说,如果其中一个字段为空,我就会收到"废话"消息。我也试过只检查是-否和a、b、c,这也很好,即如果是-否中有一个是,如果a、b和c字段为空,我会得到废话。

但我需要满足所有条件,然后才能进入下一步。我在SO上读到的帖子让我走到了现在的舞台。但没有一个达到我想要的项目水平。

任何关于逻辑的提示都将不胜感激!

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

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

它之所以有效,是因为单独的if(mandatory-text1)意味着如果定义了强制文本1,而不是空或空字符串,所以在这种情况下,单独的$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
}

对于a||b||c

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

这不是你想象的那样。上面写着:

如果强制文本1不为空或强制文本2不为空,或强制文本3等于"。

尝试:

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

您可以以更可读的方式重新设计控件,每个字段类型都有一个函数或代码块,例如:

<?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
}
?>

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

  • 长AND/OR语句
  • 用smae控件重复你的自我

如果我理解正确,这样的东西应该会起作用。不要在变量名中使用短划线。

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
}