如何解决PHP中的未定义索引错误

时间:2018-10-04 06:46:45

标签: php session-state

我想根据用户的登录状态在Web应用程序的导航栏中显示或隐藏一组给定的链接。

下面是我的代码段;

<nav>
    <a id="mainpage">Main Page</a>
    <?php if ($_SESSION['logged_in'] === false) { ?>
    <a href="login2.php">Login</a>
    <a href="register.php">Register</a>
    <?php } else { ?>
    <a href="post.php">Posting</a>
    <a href="#">Members posts</a>
    <a href="logout.php" class="outbutton">Logout</a>
    <?php } ?>
</nav>

这是我的登录页面脚本;

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = ($_POST['username']);
    $password = ($_POST['password']);
    $q = "SELECT * FROM users WHERE username='$username' AND pass='$password'";
    $x = $conn->query($q);

    if ($x->num_rows > 0) {
        while ($row = $x->fetch_assoc()) {
        $_SESSION['logged_in'] = true;
        header("location: welcome.php");
    }
} else {
    die("Username or Password is incorrect");
}

我的登录脚本可以正常工作,但是在index.php页上,当用户未登录时,出现以下错误:

  

注意:未定义的索引:login_in

另一方面,当用户成功登录时,链接将显示在导航栏中。

我在PHP脚本的开头使用session_start(),而不使用其他任何代码。

3 个答案:

答案 0 :(得分:1)

在下面显示菜单的地方尝试

<nav>
<a id="mainpage">Main Page</a>
<?php if (!isset($_SESSION['logged_in'])) { ?>
    <a href="login2.php">Login</a>
    <a href="register.php">Register</a>
<?php } else { ?>
    <a href="post.php">Posting</a>
    <a href="#">Members posts</a>
    <a href="logout.php" class="outbutton">Logout</a>
<?php } ?>

答案 1 :(得分:0)

您应该使用isset之类的功能

if(isset($_SESSION['logged_in'])){
  // your code
}

详细信息:未设置首次会话且用户已注销,并且logged_in中没有$_SESSION索引,这就是phpwarning的原因

您还可以使用@ for more details

  

PHP支持一种错误控制运算符:at符号(@)。什么时候   在PHP表达式之前,可能会出现任何错误消息   该表达式生成的结果将被忽略。

答案 2 :(得分:0)

session_start()
if(isset($_SESSION['logged_in'])){
    echo "SHOW MY LOGGED IN SESSION ".$_SESSION['logged_in'];
}else