【问题标题】:How to handle multiple if statements PHP如何处理多个 if 语句 PHP
【发布时间】:2015-08-21 14:33:13
【问题描述】:
  • 列表项

只是想对最有效的方法提出一些意见。我有一个电子邮件输入和一个电话输入。我应用了 JQuery 验证,效果很好。基本上,它们都不能为空。如果只提供一个,那很好。如果两者都提供,那也很好。

每个字段都会调用自己的 API。如果提供了电话字段,它将调用电话API,如果提供了电子邮件字段,它将调用电子邮件API,如果提供了两个字段,它将调用两个API。为了处理这个,我几乎做到了

if (isset($_POST["email"]) && !empty($_POST["email"])){
    //call email API
}
if (isset($_POST["phone"]) && !empty($_POST["phone"])){
    //call phone API
}

这似乎涵盖了上述所有情况,尽管可能有更有效的方法来做到这一点。

通过我的验证,我还想记录按下提交按钮的任何时间(它将失败验证并且用户不会知道,我只想记录它)。所以我设置了一个 invalidHandler 并获取输入的值(如果有的话)并将它们传递给 PHP。

但是,在 PHP 中处理此问题的最佳方法是什么?如果只填写一个字段,我不希望它触发,因为上面会处理这个问题。如果两个字段都为空,我也不希望它触发。如果一个或两个字段的数据无效(验证失败),我真的希望它触发。如果一个字段有有效数据而另一个没有,那么我不需要担心这个。

所以真的只是在寻找在 PHP 中处理此类事情的最佳方法。

谢谢

【问题讨论】:

  • 我看起来也很好。问题是什么。这是正确和好的。
  • 如果验证失败,我不希望它调用 API。我需要检查一下 PHP 是否验证失败
  • 如果您询问验证,我们真的应该看到您的代码。我只会有一个以 valid = true 开头的标志,当有无效数据时将其设置为 false 并在验证检查后检查该标志。

标签: php jquery validation


【解决方案1】:

不确定您真正要问的是什么,但我认为您需要的是每次检查的标志和 OR 运算符:

$flag_phone = $flag_email = false;
if (phone_has_invalid_data()) {
    $flag_phone = true;
}
if (email_has_invalid_data()) {
    $flag_email = true;
}
if ($flag_email OR $flag_phone) {
    //throw some error
} else {
    //everything ok
}

(说到不必要的优化,代码if (isset($var) && !empty($var))等价于if (!empty($var))

【讨论】:

  • 这看起来不错,尽管您可以使用一个 $flag?虽然这取决于用户希望如何显示错误。
  • @SpencerWieczorek 是的,您可以将其缩短,但为了清楚起见,我将其保持为“冗长”
【解决方案2】:

这是一个毫无意义的优化,但你可以这样做:

if (isset($_POST["email"]) && !empty($_POST["email"])){
    //call email API
} elseif (isset($_POST["phone"]) && !empty($_POST["phone"])){
    //call phone API
}

除此之外,它看起来不错

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多