如果那么语句没有被读取php

时间:2017-12-13 22:29:32

标签: php function if-statement post boolean

我有一个程序来评估if then语句并返回true或false

false =一切都很好

true =仍然需要更多信息

所以这是我的代码

function city_state_zip_requirement($parameters_ar){
    //clear requirements if all the address fields are filled and the first and last or company is filled
    if (!empty($parameters_ar['Address']) && !empty($parameters_ar['City']) && !empty($parameters_ar['State']) && !empty($parameters_ar['Zip']) && (!empty($paramenters_ar['First'] && !empty($paramenters_ar['Last'])) || !empty($paramenters_ar['Company']))){
    return false;
    // clear the requirement if the first and last name  or company fields are filled and there is no filled field in the address city state or zip column
    } elseif ((!empty($parameters_ar['First']) && !empty($parameters_ar['Last']) && empty($paramenters_ar['Address']) && empty($paramenters_ar['City']) && empty($paramenters_ar['State']) && empty($paramenters_ar['Zip'])) || (!empty($parameters_ar['Company']) && empty($paramenters_ar['Address']) && empty($paramenters_ar['City']) && empty($paramenters_ar['State']) && empty($paramenters_ar['Zip']))){
    return false;
    // clear the requirement if the email address field is filled and the adress fields are either all filled or all empty
    } elseif (!empty($parameters_ar['Email_Address']) && empty($parameters_ar['Address']) && empty($parameters_ar['City']) && empty($parameters_ar['State']) && empty($parameters_ar['Zip'])){
    return false;
    } else {
    return true;
    }}

从通过$ _POST

发送数据的用户表单中提取所有字段

我想要完成的是,如果用户将信息输入到第一个(名字)和最后一个(姓氏)或公司字段,则地址字段必须全部填充或全部为空(即不能仅填写状态例子)

在调试时,评估为true的语句(因此返回false)是从顶部开始的第二个语句 的:

} elseif ((!empty($parameters_ar['First']) && !empty($parameters_ar['Last']) && empty($paramenters_ar['Address']) && empty($paramenters_ar['City']) && empty($paramenters_ar['State']) && empty($paramenters_ar['Zip'])) || (!empty($parameters_ar['Company']) && empty($paramenters_ar['Address']) && empty($paramenters_ar['City']) && empty($paramenters_ar['State']) && empty($paramenters_ar['Zip']))){
return false;

似乎有意义的是,当用户将数据输入到表单中时,如果仅parameter_ar['First']$parameter_ar['Last']或{{1填充其中一个地址字段时填充

2 个答案:

答案 0 :(得分:1)

重写您的代码,使其仅使用一个return语句,并根据您要评估的案例生成函数以验证您的请求参数数组。通过将代码分解为更小的部分,它将更易于管理。例如

function yourFunction($params) {
    $needMoreInfo = true;

    if (isValidCase1($params) || isValidCase2($params) ... ) {
        $needMoreInfo = false;
    }

    return $needMoreInfo;
}

// define your validation functions here

修改

你觉得奇怪的是

(
      !empty($parameters_ar['First']) 
&& !empty($parameters_ar['Last']) 
&& empty($paramenters_ar['Address']) 
&& empty($paramenters_ar['City']) 
&& empty($paramenters_ar['State'])
&& empty($paramenters_ar['Zip'])
)
||
(
    !empty($parameters_ar['Company']) 
&& empty($paramenters_ar['Address']) 
&& empty($paramenters_ar['City']) 
&& empty($paramenters_ar['State'])
&& empty($paramenters_ar['Zip']))
)

分析逻辑OR的第一部分

不为空:名字,姓氏 空:地址,城市,州,邮编

如果名字和姓氏是唯一填写的字段,则此条件将评估为TRUE。因为"返回false"在这种情况下,返回FALSE。

阅读更多关于逻辑AND,OR,NOT的信息,如果仍不清楚的话。

也可能是HTML表单中存在错误,导致提交的内容与您的预期不同,这可以通过提供的代码来确定

答案 1 :(得分:0)

我终生无法弄明白为什么PHP在&&$parameters_ar['First']之后的语句中忽略了其他$parameters_ar['Last'],结果证明了这一点。

我拼写错误parameters_ar['Address'](和其他字段)错误,我拼错了参数 n ters_ar ['地址']一旦我解决了拼写错误问题就消失了。

我正在使用Notepad ++,似乎我在文件的其他地方犯了同样的错误,所以自动完成功能提出了我想要输入的内容,但实际上是错误的

这就是为什么php将$ parame n ters_ar ['Address']读为空,因为没有为它们分配值,因此评估为true,因此返回false。

谢谢