0

此功能失败 -

function check_required_fields($required_array) {
    $field_errors = array(); 
    foreach($required_array as $fieldname) {
        if ($fieldname == "date_expires_input") {
                if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" ) 
//print "here";
                    {
                    $field_errors[] = $fieldname;
                    }
                } if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && !is_numeric($_POST[$fieldname])))
                {
                $field_errors[] = $fieldname;
                }
            }
            return $field_errors; 
        }

但是当我取消注释打印“这里”时,它起作用了!(虽然没有打印“这里”)。到底他妈发生了什么?!

4

3 回答 3

4

如果你这样做

if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" ) 
   print "here";

以下块不依赖于 if。

因此,取消注释print "here";实际上只是删除if以下代码块的。

注意牙套的压痕和连贯性,它有助于避免这种错误。

于 2012-06-15T13:51:30.370 回答
3

你的内在条件从未得到满足:

if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" ) ...

只要您之前已经在整理一个闭包,就永远无法满足

if ($fieldname == "date_expires_input") ...
于 2012-06-15T13:56:15.933 回答
2

它失败了,因为print "here";它不在if语句的大括号内。这会导致 PHP 将此单个语句视为语句的主体if

然后无条件执行以下用大括号分隔的块。基本上,它等效于以下代码

function check_required_fields($required_array) {
    $field_errors = array(); 
    foreach($required_array as $fieldname) {
        if ($fieldname == "date_expires_input") {
                if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" )
                {
                    // Inside the if statement
                    print "here";
                }
                // Outside the if statement
                $field_errors[] = $fieldname;
                } if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && !is_numeric($_POST[$fieldname])))
                {
                $field_errors[] = $fieldname;
                }
            }
            return $field_errors; 
        }
于 2012-06-15T13:53:36.917 回答