Php 未读取完整的if-then语句

Php 未读取完整的if-then语句,php,function,if-statement,post,boolean,Php,Function,If Statement,Post,Boolean,我有一个计算if-then语句并返回true或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['A

我有一个计算if-then语句并返回true或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;
    }}
所有字段都从通过$\u POST发送数据的用户表单中提取

我试图实现的是,如果用户在名(first name)和姓(last name)或公司字段中输入信息,则地址字段必须全部填充或全部为空(例如,不能仅填充状态)

调试后,计算为true(因此返回false)的语句是从顶部算起的第二个语句 委员会:


当用户在表单中输入数据时,如果只有
parameter\u ar['First']
$parameter\u ar['Last']
$parameter\u ar['Company'],php评估上述语句是否正确(因此返回false),这似乎没有意义
已填充,而其中一个地址字段已填充

请重写代码,使其仅使用一条返回语句,并根据要评估的情况生成函数来验证请求参数数组。通过将代码分解成更小的部分,它将更易于管理。比如说

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。由于后面跟着一个“return false”,因此在本例中,返回false

阅读更多关于逻辑AND的信息,或者,如果仍然不清楚,请不要阅读


也可能是HTML表单中有一个错误,导致提交与您期望的不同。这无法用提供的代码确定。我一辈子都搞不明白为什么PHP忽略了
$parameters\u ar['First']
$parameters\u ar['Last']之后的语句中的另一个
&
,事实证明

我把
parameters\u ar['Address']
(和其他字段)拼写错误,而是把它拼写成parameternters\u ar['Address'],一旦我纠正了拼写错误,问题就消失了

我正在使用记事本+,似乎我在文件的其他地方犯了同样的错误,因此自动完成功能显示了我试图键入的内容,但实际上是不正确的

这就是为什么php将$paramenters_ar['Address']读取为空,因为没有为它们分配值,因此计算结果为true,因此返回false


谢谢你

你认为“
return
”是什么意思?在这种情况下给出了一个布尔值1或0,是吗?这意味着你永远不会点击你的
else
——为了调试,请将你的返回设置为
return'inside if'
等,这将帮助你了解发生的返回。。然后由你来决定why@Zak除了在
first
last
字段中输入数据外,我正在点击else语句,调试后,我发现顶部语句中的第二个语句是罪魁祸首
在只输入
第一个
最后一个
以及
地址
字段时返回false
。我编辑了我的问题,因为我认为我的问题被误解了,谢谢你的回答,我会像你一样重写我的代码,我没想过要这么做,而且它更容易阅读。这让我觉得我对php的理解可能是错误的。我基本上是在一个if语句中做两个if语句,用
|
分隔,如果左侧为真,那么做一些代码如果右侧为真,那么做一些代码,也许这在php中是不可能的,但我仍然不明白它是如何忽略其余的
&&
,因为它应该匹配6个条件才是真的,但它只考虑前两个,因为其中一个地址字段已填充,但仍然返回false始终在php.ini中使用
error\u reporting=E\u ALL
进行开发,那么您的错误会立即显现出来,所以修复php.ini,它将为您节省大量调试时间。
(
      !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']))
)