使用 $_SESSION php 的多级导航栏
multiple level navbar using $_SESSION php
我开门见山。
我正在构建一个登录系统,我已经完成了我的登录。 当我尝试登录并更改我的登录状态时,问题出现了,我正在根据有效的用户类型更改我的导航栏,但是当我注销时,它抛出了一些关于 $_SESSION 为 NULL。
所以我基本上是在寻找一种方法来纠正我的错误。
这是代码和一些屏幕截图。
这是 header 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();
}
}
}
}
In index page, first error. $_SESSION not indexed
Already logged in, no errors
After log out, the same message
而不是:
if($_SESSION['tipo_usuario']){
$tipo_usuario = $_SESSION['tipo_usuario'];
}
检查是否已设置且不为空:
if (isset($_SESSION['tipo_usuario']) && !empty($_SESSION['tipo_usuario'])) {
$tipo_usuario = $_SESSION['tipo_usuario'];
}
我开门见山。
我正在构建一个登录系统,我已经完成了我的登录。 当我尝试登录并更改我的登录状态时,问题出现了,我正在根据有效的用户类型更改我的导航栏,但是当我注销时,它抛出了一些关于 $_SESSION 为 NULL。
所以我基本上是在寻找一种方法来纠正我的错误。
这是代码和一些屏幕截图。
这是 header 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();
}
}
}
}
In index page, first error. $_SESSION not indexed
Already logged in, no errors
After log out, the same message
而不是:
if($_SESSION['tipo_usuario']){
$tipo_usuario = $_SESSION['tipo_usuario'];
}
检查是否已设置且不为空:
if (isset($_SESSION['tipo_usuario']) && !empty($_SESSION['tipo_usuario'])) {
$tipo_usuario = $_SESSION['tipo_usuario'];
}