设置超全局的默认值

时间:2010-05-23 08:04:20

标签: php

我一直在时间表管理网站上工作。我的主页为index.php

//index.php (only relevant portion shown)
<?php
      session_start();

    if($_SESSION['logged']=='set')
    {

       $x=$_SESSION['username'];

              echo '<div align="right">';
              echo 'Welcome ' .$x.'<br/>';
              echo'<a href="logout.php" class="links">&nbsp;<b><u>Logout</u></b></a>' ;   

    }   

    else if($_SESSION['logged']='unset')
    {
             echo'<form id="searchform" method="post" action="processing.php">
                  <div>
                  <div align="right">
                  Username&nbsp;<input type="text" name="username" id="s" size="15" value="" />
                  &nbsp;Password&nbsp;<input type="password" name="pass" id="s" size="15" value="" />
                  <input type="submit" name="submit" value="submit" />
                  </div>
                  <br />
                  </div>
                  </form> ';

     }
?>

我面临的问题是,在第一次运行此脚本时,我收到错误Notice: Undefined index: logged in C:\wamp\www\ps\index.php但刷新页面后错误消失。

如何更正此问题? logged是一个变量,可帮助确定用户是否已登录。用户登录时设置$_SESSION['logged'],否则取消设置。我希望在执行脚本之前将$_SESSION['logged']的默认值设为unset。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

最初启动会话时,$_SESSION是一个空数组,$_SESSION['logged']不存在。读取对未初始化的变量或数组索引的访问会发出通知(假设错误报告级别包含通知):

echo $undefinedVariable;

$emptyArray = array();
echo $emptyArray['undefined index'];

要解决此问题,您应该测试您想要读取的变量或数组索引是否确实存在。对于变量,有isset,对于数组索引,您也可以使用issetarray_key_exists

答案 1 :(得分:1)

如果使用'@'符号,也可以防止函数抛出错误,例如@function_call();

你真的想做“if($ _ SESSION ['logged'] ='unset')”?如果你想做作业,可以考虑取出“if”来使你的代码更清晰。否则,您可能想要使用相等运算符。 : - )