Многоуровневая панель навигации с использованием $_SESSION php

Я перейду прямо к делу.
Я создаю систему входа в систему, у меня все готово для входа в систему. Проблема появляется, когда я пытаюсь войти в систему и изменить состояние входа в систему. Я меняю свою панель навигации в зависимости от типа пользователя, который работает, но когда я выхожу из системы, мне выдается какая-то ошибка о $_SESSION имеет значение NULL.
Так что я в основном ищу способ исправить свои ошибки.

Вот коды и несколько скриншотов.

Вот заголовочный файл php.

<?php
session_start();
global $tipo_usuario;
if ($_SESSION['tipo_usuario']){
 $tipo_usuario = $_SESSION['tipo_usuario'];
}

?>
<!DOCTYPE html>
<html lang = "es">
<head>
 <meta charset = "UTF-8">
 <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
 <meta http-equiv = "X-UA-Compatible" content = "ie=edge">
 <link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity = "sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin = "anonymous">
 <link rel = "stylesheet" href = "css/login.css">
</head>
<?php
if ($tipo_usuario == "Admin") {
 require("navbarIniciadoAdmin.html");
 //echo($tipo_usuario);
} else if ($tipo_usuario == "User") {
 require("navbarIniciadoUser.html");
 //echo($tipo_usuario);
} else {
 require("navbarNoIniciado.html");
 //echo($tipo_usuario);
}
?>
</html>

А вот и файл login-inc.php.

<?php
if (isset($_POST['login-submit'])) {
 login();
} else {
 header("Location: ../index.php");
 exit();
}

function login() {
 require 'dbc-inc.php';

 $nombreUsuario = $_POST['username'];
 $password = $_POST['password'];

 if (empty($nombreUsuario) || empty($password)) {
  header("Location: ../index.php?error=emptyfields&username = " . $nombreUsuario);
  exit();
 } else {
  $sql = "SELECT * FROM usuarios  WHERE NOMBRE_USUARIO = ?;";
  $stmt = mysqli_stmt_init($connection);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
   header("Location: ../index.php?error=sqlerror");
   exit();

  } else {

   mysqli_stmt_bind_param($stmt, "s", $nombreUsuario);
   mysqli_stmt_execute($stmt);
   $result = mysqli_stmt_get_result($stmt);

   if ($row = mysqli_fetch_assoc($result)) {
    $checkPassword = password_verify($password, $row['PWD_USUARIO']);
    if ($checkPassword == false) {
     header("Location: ../index.php?error=ContraseñaIncorrecta");
     exit();
    } else if ($checkPassword == true) {
     $contador = 1;
     session_start();
     $_SESSION['id_usuario'] = $row['ID_USUARIO'];
     $_SESSION['nombre_usuario'] = $row['NOMBRE_USUARIO'];
     $_SESSION['tipo_usuario'] = $row['TIPO_USUARIO'];


     header("Location: ../documentos.php?success=login");
     exit();
    } else {
     header("Location: ../index.php?error=ContraseñaIncorrecta");
     exit();
    }
   } else {
    header("Location: ../index.php?error=noUser");
    exit();
   }
  }
 }
}

На индексной странице первая ошибка. $_SESSION не проиндексирован

Уже авторизовался, ошибок нет

После выхода такое же сообщение

$tipo_usario = $_SESSION['tipo_usario'] ?? null; Вот для чего нужен оператор объединения null. php.net/manual/en/migration70.new-features.php
Quasimodo's clone 08.02.2019 02:16

Кстати. избегайте глобальных переменных.

Quasimodo's clone 08.02.2019 02:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
192
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вместо :

if ($_SESSION['tipo_usuario']){
 $tipo_usuario = $_SESSION['tipo_usuario'];
}

проверьте, установлен ли он и не пуст:

if (isset($_SESSION['tipo_usuario']) && !empty($_SESSION['tipo_usuario'])) {
    $tipo_usuario = $_SESSION['tipo_usuario'];
}
!empty верен только тогда, когда аргумент фактически установлен - избыточен.
Quasimodo's clone 08.02.2019 02:11

Другие вопросы по теме