如果语句不起作用--有什么建议吗?

时间:2020-07-11 作者:Colin G

所以我有一个计算客户订单数量的函数。

我想显示一个祝贺模式,当客户点击特定数量的订单时会出现该模式。

我的所有代码都工作正常,除非我将此部分添加到IF语句中:

|| in_array($count, $the_digits) && isset( $_COOKIE[\'tier_advance\'] ) && $_COOKIE[\'tier_advance\'] !== $count )

cookie正在正确保存,保存时,数字将保存为的当前值count. 其思想是,只有在以下情况下,模态才会显示:

A) 其当前计数为$the_digits 阵列(&A);未设置cookie。B) 其当前计数为$the_digits 阵列(&A);已设置cookie,但cookie值不等于其当前顺序$count 数量

这是为了防止模式在初始显示之后显示,但如果他们点击下一个,仍然允许它再次显示$count 移动到下一层的金额。

不知道怎么了。或者也许有更好的方法来做到这一点。感谢所有帮助。

        $the_digits = [\'3\',\'5\',\'15\',\'30\',\'50\'];

        if ( in_array($count, $the_digits) && !isset( $_COOKIE[ \'tier_advance\' ] ) || in_array($count, $the_digits) && isset( $_COOKIE[\'tier_advance\'] ) && $_COOKIE[\'tier_advance\'] !== $count )  {
        echo\'
            
            <script>
                    jQuery(window).on("load",function(){
                        jQuery("#tier_advance").modal("show");
                    });
                    jQuery(document).on("click", "#tier_confirm", function(){            
                        // Set a cookie
                        Cookies.set("tier_advance", "\' . $count . \'", { expires: 356 });
                    });

            </script>
            
            <!-- BEGIN Share Modal -->
            <div class="modal fade" id="tier_advance" tabindex="-1" role="dialog">
              <div class="modal-dialog modal-dialog-centered" role="document">
                <div class="modal-content">
                  <div class="modal-header text-center">
                    <h5>CONGRATULATIONS!</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                      <span aria-hidden="true">&times;</span>
                    </button>
                  </div>
                  <div class="modal-body text-center">
                  <p>You are now a <strong class="all-caps"> \' . $tier_name . \' </strong>tier customer!</p>
                  <p>Expect some dope rewards to start coming your way!</p>
                  </div>
                  <div class="modal-footer modal-footer-centered">
                    <button id="tier_confirm" type="button" class="btn btn-secondary" data-dismiss="modal">Awesome, thanks!</button>
                  </div>
                </div>
              </div>
            </div>
            <!-- END Share Modal -->\';

     }

2 个回复
SO网友:mozboz

如果问题出在那份包含大量&&;然后简化它是个好主意。要稍微重构一下代码,使其更易于理解(这样,当你在2年内看到它时,你就可以理解它),你可以这样做:

之前:

    if ( in_array($count, $the_digits) && !isset( $_COOKIE[ \'tier_advance\' ] ) || in_array($count, $the_digits) && isset( $_COOKIE[\'tier_advance\'] ) && $_COOKIE[\'tier_advance\'] !== $count )
之后:

    $showModal = false;

    if (in_array($count, $the_digits)) {
        if (!isset( $_COOKIE[ \'tier_advance\' ] )) {
            $showModal= true;
        } else {
            if ($_COOKIE[\'tier_advance\'] !== $count) {
                $showModal = true;
            } else {
                // echo "false because tier_advance !== count
            }
        } 
    } else {
        // echo "false because not in the_digits";
    }

    if ($showModal) {
          // do the thing
    }
虽然这要长得多,但更容易理解逻辑and 它允许您向其中添加一些调试语句,以便您可以看到它在什么时候设置为true/false进行调试。我在这里举了几个echo作为例子,但很明显,如果您可以使用日志功能,那就更好了。

编辑:我刚刚注意到您正在使用!== 正如您所知,它执行类型检查和相等性检查。我认为在这种情况下,cookie可能始终是一个字符串,因此您应该使用!= 相反

SO网友:Colin G

ANSWER

$_COOKIE["tier_advance"] !== "$count")
注意变量上的引号。Cookie保存为字符串,因此如果没有引号,它听起来是真的。

感谢@mozboz将其清理干净,让我更清楚地看到这一点。

相关推荐

在WordPress编辑器中使用html定制页面,还是直接在php模板文件中编写?

我正在从以前构建的html站点构建一个自定义主题。我使用高级自定义字段设置了一些页面,以便客户端可以更改这些页面的部分内容。我使用page-{slug}设置它们。php。我还有一些根本不会改变的页面,也使用了page-{slug}来实现这些。。。。。将所有代码和内容都放在php模板中可以吗?因为如果有任何变化,我将是处理它们的人。此外,此主题永远不会被重新分发,因此不需要处理其他主题。谢谢你的帮助。。。