我一直在时间表管理网站上工作。我的主页为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"> <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 <input type="text" name="username" id="s" size="15" value="" />
Password <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
。我该如何解决这个问题?
答案 0 :(得分:3)
最初启动会话时,$_SESSION
是一个空数组,$_SESSION['logged']
不存在。读取对未初始化的变量或数组索引的访问会发出通知(假设错误报告级别包含通知):
echo $undefinedVariable;
$emptyArray = array();
echo $emptyArray['undefined index'];
要解决此问题,您应该测试您想要读取的变量或数组索引是否确实存在。对于变量,有isset
,对于数组索引,您也可以使用isset
或array_key_exists
。
答案 1 :(得分:1)
如果使用'@'符号,也可以防止函数抛出错误,例如@function_call();
你真的想做“if($ _ SESSION ['logged'] ='unset')”?如果你想做作业,可以考虑取出“if”来使你的代码更清晰。否则,您可能想要使用相等运算符。 : - )