PHP会话在if语句中意外更改并忽略echo命令

PHP会话在if语句中意外更改并忽略echo命令,php,session,if-statement,Php,Session,If Statement,当Wordpress中的特定页面显示时,我将$\u会话['showroom']设置为“活动”: if(get_the_ID()==6470||get_the_ID()==252){ $_SESSION['showroom']='active'; } 然后,我设置了两个页面数组进行检查。如果显示的下一页不在其中一个阵列中,$\u会话['showroom']将更改为“inactive” $allowed_templates = array('template-A.php',

当Wordpress中的特定页面显示时,我将$\u会话['showroom']设置为“活动”:

if(get_the_ID()==6470||get_the_ID()==252){
    $_SESSION['showroom']='active';
}
然后,我设置了两个页面数组进行检查。如果显示的下一页不在其中一个阵列中,$\u会话['showroom']将更改为“inactive”

$allowed_templates = array('template-A.php',
                           'template-B.php',
                           'template-C.php',
                           'template-E.php',
                           'template-G.php');
$allowed_ids = array(6470,252);

$template_name = get_page_template_slug();
$page_id = get_the_ID();

if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){
    $_SESSION['showroom']='inactive';
}
if语句大部分时间都有效,但有时我的$\u会话['showroom']会变为非活动状态,即使其中一个数组返回true!经过几个小时的测试,我无法找到问题所在。重复if语句的两个部分总是给我2个真或1个真+1个假,但从来没有2个假:

if(in_array($template_name,$allowed_templates)==false){echo 'TFALSE';}
if(in_array($template_name,$allowed_templates)){echo 'TTRUE';}
if(in_array($page_id,$allowed_ids)==false){echo 'IFALSE';}
if(in_array($page_id,$allowed_ids)){echo 'ITRUE';}
我错过了什么

提前感谢您的帮助

编辑:继续测试并发现以下异常:

    if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){
    $_SESSION['showroom']='inactive';
    echo 'SET TO INACTIVE';
}
if语句将$\u会话['showroom']更改为'inactive',但不回显'SET to inactive'


这里发生了一些奇怪的事情

您可以尝试以下方法

 if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){
     $_SESSION['showroom']='inactive';
 }
编辑:让我们尝试进一步细分。。。与您的示例类似

 if(!in_array($template_name,$allowed_templates){
     echo "not in templates,";
 }
 if(!in_array($page_id,$allowed_ids)){
     echo "not in ids,";
 }
 if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){
     echo "not in both\n";
 }

然后看看我们得到的结果是不是
不在模板中,不在id中,
但没有拖尾
不在两者中

问题纯粹是逻辑问题。让我们看看这句话:

if (in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false)
这将转换为“如果模板无效页面无效”

这意味着需要满足这两条语句才能将会话标记为非活动。如果模板很好,但页面无效怎么办?这当然也应该标记为不活动

通过将语句改为“如果模板无效页面无效”,我们掩盖了无效情况。因为它们中的任何一个都算作无效状态,因此,只有其中一个必须为false才能使所有内容都为false。(或声明)

所以从代码角度来说应该是这样的

if (in_array($template_name,$allowed_templates)==false || in_array($page_id,$allowed_ids)==false)
你已经准备好了


作为补充和补充。我将按照您指出的工作方式组织代码。这更符合逻辑。也就是说,当它被视为非活动时,将其标记为非活动,在所有其他情况下,将其标记为“活动”。反之亦然

问题解决了。我的密码很好。两个丢失的图像文件导致WordPress使我的会话崩溃。花了10个小时才找到,但很高兴我找到了。感谢大家的帮助。

if(in_array($template_name,$allowed_templates)&&in_array($page_id,$allowed_id)){$_SESSION['showroom']='inactive'}
if(in_array($template_name,$allowed_templates)==false&&in_array($page_id,$allowed_id,$id)==false){SESSION['showroom']='inactive'}
如果将所有这些
if..echo
语句放在设置会话变量的
if
中,您会看到什么?谢谢Dave!in_数组是我最初尝试的,但也是同样的问题。求助于==假作为替代,但仍然没有运气!因为数组中的
返回一个布尔值,所以
之间绝对没有区别!在_array()
和_array()==false
@Barmar中,您是正确的,这与Anant的评论类似。请参阅其他编辑,以查看这是否会给我们带来无法解释的结果。请快速确认。。。您知道吗?\u array()中的
是区分大小写的,并且您使用的数据可能会或可能不会因此而导致匹配失败?假设您在echo语句中看到了这种行为,但我需要检查两个数组。只有当模板和页面id无效时,会话才会变为非活动状态。