如何仅在用户登录时才能显示元素?

时间:2011-12-15 18:28:21

标签: php

我只是在用户登录时尝试显示div,因此只有当$_SESSION['MM_Username']存在且等于某事时才能实现这一点我想出了以下代码。会话变量已设置,我知道它们存在,但是当我退出时,我仍然看到div:

<ul id="example-1" class="sticklr" style="list-style:none;display:<?php if ($_SESSION['MM_Username']=='' & $_SESSION['MM_Username']==NULL){echo('none');}?>">

如何调试此问题以查看问题是什么,或者如果有人知道只有在用户登录时才能更好地显示div,请告诉我。

6 个答案:

答案 0 :(得分:2)

要检查是否在PHP中设置了变量,您可以使用isset()函数:

<?php

//this checks to see if the variable isset and not null, if it is not set or is null then echo 'none';
if (!isset($_SESSION['MM_Username']) || empty($_SESSION['MM_Username'])){
    echo 'none';
}

?>

empty()检查是否存在与变量关联的值:http://php.net/empty

  

如果使用unset()取消设置变量,则不再设置该变量。   如果测试已设置为的变量,则isset()将返回FALSE   空值。另请注意,NULL字节(“\ 0”)不等同于PHP   NULL常量。

来源:http://php.net/isset

关于isset()的一个很酷的事情是,当你询问是否设置了一个不是的变量时,它不会抛出错误或警告信息。

答案 1 :(得分:1)

将测试条件设置为脚本开头的变量:

$isLoggedIn = isset($_SESSION['MM_Username']);

然后将您的标记包装在if:

<?php if (isLoggedIn) { ?>
<ul></ul>
<?php } ?>

答案 2 :(得分:1)

几个问题: 你应该使用|| if语句的(OR)运算符(这可能是问题的根源,因为这个if语句总是返回false ...有些东西既不能是空字符串也不能为null) 2.如果此块包含任何类型的安全信息,则应将其完全删除,而不是仅使用css隐藏它

答案 3 :(得分:1)

在用户登录成功后注册一个布尔值为“True”的会话。

Ex:$ _SESSION ['userLogin'] = TRUE;

您可以将元素显示为下方,

    <ul id="example-1" class="sticklr" style="<?php if($_SESSION['userLogin']) echo 'display:block;'; else 'display:none;'?>">

当该用户注销时将FALSE值分配给该会话

$ _ SESSION [ 'USERLOGIN'] = FALSE;

答案 4 :(得分:0)

您在退出时使用session_destroyunset($_SESSION['MM_Username'])吗?

我认为这可以帮到你。

答案 5 :(得分:0)

我会用不同的方式来解决这个问题。我只会显示<ul> ,如果会话变量不为空。也许是这样的事情:

<?php if( !is_null($_SESSION['MM_Username']) ): ?>
<ul id="example-1" class="sticklr" style="list-style:none;">
  <!-- ... -->
</ul>
<?php endif ?>