我有一个程序来评估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填充其中一个地址字段时填充
答案 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。
谢谢