Как устранить неопределенную ошибку индекса в PHP - PullRequest
0 голосов
/ 04 октября 2018

Я хотел бы показать или скрыть данный набор ссылок на панели навигации веб-приложения в зависимости от состояния входа пользователя.

Ниже приведен фрагмент моего кода;

<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 появляется ошибка ниже, когда пользователь не вошел в систему:

Примечание: неопределенный индекс: logged_in

С другой стороны, ссылки отображаются на панели навигации при успешном входе пользователя в систему.

Я использую session_start() в начале моего сценария PHP перед любыми другими кодами.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018
session_start()
if(isset($_SESSION['logged_in'])){
    echo "SHOW MY LOGGED IN SESSION ".$_SESSION['logged_in'];
}else
0 голосов
/ 04 октября 2018

попробуйте ниже, где вы отображаете меню

<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 } ?>
0 голосов
/ 04 октября 2018

Вы должны использовать isset функцию, подобную

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

Подробно: первый сеанс не установлен, и пользователь выходит из системы, и в $_SESSION нет индекса logged_in, поэтому php черезwarning

также вы можете использовать @ для получения более подробной информации

PHP поддерживает один оператор контроля ошибок: знак at (@).При добавлении к выражению в PHP любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...