【问题标题】:full if then statement is not being read php完整的 if then 语句没有被读取 php
【发布时间】:2018-05-27 22:27:50
【问题描述】:

我有一个程序可以评估 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 发送数据的用户表单中提取的

我想要完成的是,如果用户在名字(名字)和姓氏(姓氏)或公司字段中输入信息,则地址字段必须全部填写或全部为空(即不能只填写状态例子)

在调试时,评估为真(因此返回假)的语句是倒数第二个 该:

} 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']$paramenter_ar['Company'] 被填充,而一个的地址字段已填写

【问题讨论】:

  • 你认为“return”有什么作用?
  • 在这种情况下给出布尔值 1 或 0,是吗?
  • 这意味着你永远不会打到你的else -- 对于调试设置你的返回到return 'inside if' -- return 'inside elseif' 等等等等 这将帮助你理解 which返回正在发生..然后由你​​来弄清楚为什么
  • @Zak 除了在 firstlast 字段中输入数据时,我正在点击我的 else 语句,在调试时我发现顶部语句中的第二个是罪魁祸首 returning false输入 firstlast 以及 address 字段之一。

标签: php function if-statement post boolean


【解决方案1】:

我终生无法弄清楚为什么 PHP 在 $parameters_ar['First']$parameters_ar['Last'] 之后的语句中忽略了另一个 &&,事实证明。

我拼写错误parameters_ar['Address'](和其他字段),而是拼写它 paramenters_ar['Address'] 一旦我修复了拼写错误问题就消失了。

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

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

谢谢

【讨论】:

  • 始终在 php.ini 中使用error_reporting=E_ALL 进行开发,那么您的错误会立即显而易见,因此请修复您的 php.ini,它将为您节省大量调试时间。
【解决方案2】:

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

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']))
)

分析逻辑或的第一部分

非空:名字,姓氏 空:地址、城市、州、邮编

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

如果还不清楚,请阅读有关逻辑 AND、OR、NOT 的更多信息。

也可能是 HTML 表单中存在错误,导致提交与您期望的不同位,这无法通过提供的代码确定

【讨论】:

  • 我编辑了我的问题,因为我认为我的问题被误解了,谢谢你的回答
  • 我会像你一样重写我的代码,没想到会这样做,而且更容易阅读。这让我觉得我对php的理解可能是错误的。我实际上是在尝试在一个由|| 分隔的语句中执行两个 if 语句,如果左侧为真,则执行一些代码,如果右侧为真,则执行一些代码,也许这在 php 中无论如何都是不可能的对我来说它是如何忽略 && 的其余部分没有意义,因为它应该匹配 6 个条件为真,但它仅将前两个作为地址字段之一已填充但仍返回错误
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
相关资源
最近更新 更多