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

How to resolve Undefined index error in PHP

我想根据用户的登录状态在 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 页面中,当用户未登录时出现以下错误:

Notice: Undefined index: logged_in

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

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

您应该使用 isset 功能,例如

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

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

你也可以使用 @ for more details

PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.

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

在显示菜单的下方尝试

<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 } ?>