代码之家  ›  专栏  ›  技术社区  ›  Prasoon Saurav

设置superglobal的默认值

php
  •  0
  • Prasoon Saurav  · 技术社区  · 14 年前

    我一直在一个时间表管理网站上工作。我的主页是 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'] 设置,否则取消设置。我想要的默认值是 $会话[“已记录”] 成为 unset 在执行脚本之前。我怎样才能解决这个问题?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Gumbo    14 年前

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

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

    为了解决这个问题,您应该测试您想要读取的变量或数组索引是否真的存在。对于变量,有 isset 对于数组索引,可以使用 伊塞特 太或 array_key_exists .

        2
  •  1
  •   Jan K.    14 年前

    如果使用“@”符号,例如@function_call();,还可以防止函数引发错误。

    是否确实要执行“if($_session['logged']='unset')”?如果你想做一个任务,考虑去掉“如果”,使你的代码更清晰。否则,可能需要使用相等运算符。-)