【问题标题】:If statement with && and multiple OR conditions in PHPPHP中带有&&和多个OR条件的if语句
【发布时间】:2016-03-11 01:28:25
【问题描述】:

我在尝试使下面的语句按我想要的方式工作时遇到了麻烦。

如果至少有一个文本字段未填写,我正在尝试为订单显示一条错误消息。下面是我的 PHP 代码的 sn-p。 'cookieGiftBox' 是用户可以选择的复选框的名称,如果选中,他们必须在提供的文本字段中输入他们想要的口味的 cookie 数量。如何在选中复选框但未填写任何文本字段时显示错误消息?

<?php
    if (isset($_POST['cookieGiftBox'])
        && (!isset($_POST['sugar']) 
            || ($_POST['chocolateChip'])
            || ($_POST['chocolateChipPecan']) 
            || ($_POST['whiteChocolateRaspberry'])
            || ($_POST['peanutChocolateChip']) 
            || ($_POST['peanutButter'])
            || ($_POST['tripleChocolateChip']) 
            || ($_POST['whiteChocolateChip'])
            || ($_POST['oatmealRaisin']) 
            || ($_POST['cinnamonSpice'])
            || ($_POST['candyChocolateChip']) 
            || ($_POST['butterscotchToffee'])
            || ($_POST['snickerdoodle']))) {
        $error.="<br />Please enter an Amount for Cookie Flavors";
    }
?>

【问题讨论】:

    标签: php if-statement isset


    【解决方案1】:

    && 优先于 ||,因此您必须使用括号来获得预期结果:

    if (isset($_POST['cookieGiftBox']) &amp;&amp; (!isset($POST['sugar']) || ...)

    实际上,要检查是否选择了 nothing,您可以执行以下操作: if checkbox is checked and not (sugar is checked or chocolatechip is checked) 或等价物: if checkbox is checked and sugar is not entered and chocolatechip is not entered...。 如果您想了解更多信息,请搜索有关Boolean algebra的信息。

    更新:在您的示例和正确的语法中,我作为示例的句子应该是这样的(对于第一句,请注意不是(!)和字段周围的括号,而不是复选框):

    if (isset($_POST['cookieGiftBox']) &&
        !(
           isset($_POST['sugar']) ||
           isset($_POST['chocolatechip'])
         )
    ) { error ...}
    

    或者第二句,可能更容易理解(注意用 && 代替 ||):

    if (isset($_POST['cookieGiftBox']) &&
        !isset($_POST['sugar']) &&
        !isset($_POST['chocolatechip'])
    ) { error...}
    

    使用 ands 可确保只有在选中礼品盒复选框时未设置任何糖、巧克力片等字段时才为真(并因此显示错误)。 因此,如果选中该复选框,并且未设置任何字段,则如下所示: (true &amp;&amp; !false &amp;&amp; !false) 相当于(true &amp;&amp; true &amp;&amp; true)true,所以它显示错误。 如果复选框被选中并输入了糖,它将如下所示: (true &amp;&amp; !true &amp;&amp; !false),等。到(true &amp;&amp; false &amp;&amp; true),等于。到false,因此没有显示错误。 如果同时输入了糖和巧克力片,也不会显示错误。

    【讨论】:

    • 感谢您的回复,但我无法使其正常工作。根据您的示例,我相信我将所有括号都放在正确的位置。 if (isset($_POST['cookieGiftBox']) &amp;&amp; (!$_POST['sugar']) || (!$_POST['chocolateChip'])) { 这是我所拥有的缩短版本。如果选中复选框并且没有在框中输入文本,则此代码将显示错误。但是,需要填写“sugar”和“chocolateChip”文本字段以清除错误消息。我希望它只需要填写一个字段。所以一个或另一个......我该怎么做?谢谢
    • 如果未设置巧克力片或选中复选框且未设置糖(一对一翻译),则您的条件为真。我用两种解决问题的方法更新了答案。
    【解决方案2】:

    我有类似的问题:

    我尝试使用:

    if (isset($this-&gt;context-&gt;controller-&gt;php_self) &amp;&amp; ($this-&gt;context-&gt;controller-&gt;php_self != 'category') || ($this-&gt;context-&gt;controller-&gt;php_self != 'product') || ($this-&gt;context-&gt;controller-&gt;php_self != 'index')){ ... }

    那不行,我改成:

    if (isset($this-&gt;context-&gt;controller-&gt;php_self) &amp;&amp; ($this-&gt;context-&gt;controller-&gt;php_self != 'category') &amp;&amp; ($this-&gt;context-&gt;controller-&gt;php_self != 'product') &amp;&amp; ($this-&gt;context-&gt;controller-&gt;php_self != 'index')){ ... }

    不知道对不对?

    编辑。这是不正确的,但现在我不知道如何解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      相关资源
      最近更新 更多