Barre menu s'affiche malgré deconnexion
RésoluZakarya93 Messages postés 1026 Statut Membre -
J'ai ma barre menu qui s'affiche malgré la déconnexion sur mon site :

Code généré de la page :
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='css/style.css'>
</head>
<meta charset="UTF-8" >
<body>
<div class='menu'>
<ul>
<li><a href="index.php?page=membre">Accueil</a></li>
<li><a href="index.php?page=update">Changer vos informations</a></li>
<li><a href="index.php?page=liste_membre">les membres</a></li>
<li><a href="index.php?page=amis">Vos amis</a></li>
<li>
<a href="index.php?page=invitations">Invitations</a>
<p class='ibi_invitations'>0</p> </li>
<li>
<a href="index.php?page=conversations">Messages</a>
</li>
<li class="nbr">2 membres</li>
</ul>
</div>
<div class="right">
<ul>
<li><a href="index.php?page=logout">Se déconnecter</a></li>
</ul>
</div> <div id='content'>
?<h1>Connexion</h1>
<form method="POST" action="">
<label for="pseudo">Votre pseudo : </label>
<input type="text" name="pseudo"><br />
<label for="password">Votre password : </label>
<input type="password" name="password"><br /><br />
<input type="submit" value="Se connecter" name="submit">
</form>
<a href='index.php?page=register'>Pas encore membre </a> </div>
</body>
Comment régler cela ?
Merci d'avance :)
- Barre menu s'affiche malgré deconnexion
- Menu déroulant excel - Guide
- Ma clé usb ne s'affiche pas - Guide
- Barré whatsapp - Guide
- Windows 11 barre des taches a gauche - Guide
- Menu recovery samsung - Guide
9 réponses
La barre de menu s'affiche toujours après déconnexion, ce qui montre que son chargement n'est pas conditionné à l'état de connexion et que le header ou le menu se charge sans vérification. Pour corriger, afficher le header en amont et n'afficher le menu que si la session utilisateur est active, en entourant son inclusion d'une condition sur $_SESSION. Certaines réponses recommandent d'utiliser une vérification explicite comme if(isset($_SESSION['pseudo'])) ou $_SESSION['login'], et de déclarer session_start() dès le chargement de chaque page pour éviter les affichages intempestifs. En cas de redirections, veiller à ne pas créer de boucle et privilégier des flux de contrôle clairs, par exemple en déplaçant les inclusions dans le même bloc et en évitant les appels hors condition.
<h1>Connexion</h1>
<?php
if(isset($_POST['submit']))
{
if(empty($_POST['pseudo']))
{
$errors[] = "Veuillez saisir votre pseudo";
}
if(empty($_POST['password']))
{
$errors[] = "Veuillez saisir votre password";
}
if(!empty($errors))
{
foreach($errors as $error)
{
echo"<div class ='error'>".$error."</div>";
}
}else{
if(verifier_combinaison_pseudo_password($_POST['pseudo'],$_POST['password']) == 0)
{
echo"<div class='error'> Pseudo ou password incorrect</div>";
}else{
session_start();
$_SESSION['pseudo'] = $_POST['pseudo'];
header("Location:index.php?page=membre");
}
}
}
?>
<form method="POST" action="">
<label for="pseudo">Votre pseudo : </label>
<input type="text" name="pseudo"><br />
<label for="password">Votre password : </label>
<input type="password" name="password"><br /><br />
<input type="submit" value="Se connecter" name="submit">
</form>
<a href='index.php?page=register'>Pas encore membre </a>
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='css/style.css'>
</head>
<meta charset="UTF-8" >
<body>
<?php include('body/menu.php'); ?>
<div id='content'>
<?php
include($content);
?>
</div>
</body>
</html>
cette ligne :
<?php include('body/menu.php'); ?>
si je la supprime, j'ai plus de menu et si je refais les include menu sur chacun de mes codes mon menu retourne sur le content que faire ? :(
<h1>Connexion</h1>
<?php
if(isset($_POST['submit']))
{
if(empty($_POST['pseudo']))
{
$errors[] = "Veuillez saisir votre pseudo";
}
if(empty($_POST['password']))
{
$errors[] = "Veuillez saisir votre password";
}
if(!empty($errors))
{
foreach($errors as $error)
{
echo"<div class ='error'>".$error."</div>";
}
}else{
if(verifier_combinaison_pseudo_password($_POST['pseudo'],$_POST['password']) == 0)
{
echo"<div class='error'> Pseudo ou password incorrect</div>";
}else{
session_start();
$_SESSION['pseudo'] = $_POST['pseudo'];
header("Location:index.php?page=membre");
}
}
}
if(isset($_SESSION['login']))
{
// la totalité du code que tu veux afficher lors de la connexion donc par exemple :
include('body/header.php');
include('body/menu.php');
}
else
{
header("Location: index.php?page=login")
}
?>
<form method="POST" action="">
<label for="pseudo">Votre pseudo : </label>
<input type="text" name="pseudo"><br />
<label for="password">Votre password : </label>
<input type="password" name="password"><br /><br />
<input type="submit" value="Se connecter" name="submit">
</form>
<a href='index.php?page=register'>Pas encore membre </a>
j'ai : Parse error: syntax error, unexpected '}' in C:\wamp\www\rs\pages\login.php on line 44
l'erreur peut paraitre bete mais je ne la trouve pas :(
Ou est ce que tu fais des header location ?
As-tu essayé de tous les mettre en commentaire ?
Essaye ceci sinon :
echo "<script type='text/javascript'>document.location.replace('index.php?page=membre');</script>";
(C'est très sale comme code mais c'est pour tester !)
<div class='header'>
<?php
require_once('functions/membre.func.php');
$result= infos_membre_connecte();
//-------------------------------------------------//
$infos = $result['result'];
if(count($infos)>0){
$pseudo = isset($infos['pseudo'])?$infos['pseudo']:'';
echo "Bienvenue ". $pseudo;
}else{
echo "<br> Aucun résultat.";
}
if(!isset($_SESSION['pseudo']))
{
header("Location:index.php?page=login");
}
?>
<p><a href="index.php?page=logout">Se déconnecter</a></p>
</div>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question <?php
include('body/menu.php');
include('body/header.php');
?>
<div class="info">
<?php
// récupérations des variables AVANT de les utiliser
$email = isset($infos['email'])?$infos['email']:'';
$sexe = isset($infos['sexe'])?$infos['sexe']:'';
$apropos = isset($infos['apropos'])?$infos['apropos']:'';
print_r ($infos);
?>
<div class="info">
<p><a href="index.php?page=update_avatar">Changer votre photo de profil</a></p>
<a href="index.php?page=update_avatar"><img src="avatar/<?php echo $infos['avatar']; ?>"" height='200' width='200' alt='avatar'></a>
<p><strong>Email : </strong><em><?php echo $email; ?></em></p>
<p><strong>Sexe : </strong><em><?php echo $sexe; ?></em></p>
<p><strong>A propos de vous : </strong><em><?php echo $apropos; ?></em></p>
</div>
Et à la ligne 16 comme l'indique l'erreur, si tu cherches 4 secondes tu vois que le texte n'est pas de la même couleur sur CCM (et logiquement aussi sur ton éditeur de texte).
Donc qu'il y a un problème de guillemet, il y a deux "" qui se suivent après <?php echo $infos['avatar']; ?>
<?php
include('body/menu.php');
include('body/header.php');
?>
<div class="info">
<?php
// récupérations des variables AVANT de les utiliser
$email = isset($infos['email'])?$infos['email']:'';
$sexe = isset($infos['sexe'])?$infos['sexe']:'';
$apropos = isset($infos['apropos'])?$infos['apropos']:'';
print_r ($infos);
?>
<p><a href="index.php?page=update_avatar">Changer votre photo de profil</a></p>
<a href="index.php?page=update_avatar"><img src="avatar/<?php echo $info['result']['avatar'] ; ?>" height='200' width='200' alt='avatar'></a>
<p><strong>Email : </strong><em><?php echo $email; ?></em></p>
<p><strong>Sexe : </strong><em><?php echo $sexe; ?></em></p>
<p><strong>A propos de vous : </strong><em><?php echo $apropos; ?></em></p>
</div>
j'ai : Notice: Undefined variable: info in C:\wamp\www\rs\pages\membre.php on line 17
Dans ton header il y a :
$pseudo = isset($infos['pseudo'])?$infos['pseudo']:''; echo "Bienvenue ". $pseudo;
Donc il faut voir si $infos['pseudo'] existe et pour cela il faut voir dans ta fonction infos_membre_connecte();
A la ligne ou tu construit ton $infos['pseudo'] c'est à dire $_SESSION['pseudo'] donc est ce que $_SESSION['pseudo'] existe? Sinon c'est normal qu'il n'y ait rien puisque c'est ce que tu lui dis.
Qu'est ce que tu as codé là dedans et qu'est ce que tu as copier coller... ?
<?php
//*********************************************//
//Fichier : membre.func.php
//*********************************************//
ini_set("display_errors", "1");
error_reporting(E_ALL);
//-------------------------------------------
// Include du fichier de connexion à la BDD
//-------------------------------------------
$DIR_SITE = $_SERVER['DOCUMENT_ROOT'] . "rs"; // chemin racine de ton site
$CnxBDD = $DIR_SITE . "/functions/connect.php"; // emplacement du fichier depuis la racine de ton site
if(file_exists($CnxBDD)){
require_once($CnxBDD) ;
}else{
echo "<br><b>ERREUR !</b> Fichier $CnxBDD Introuvable";
}
if(!function_exists('infos_membre_connecte')){
/**
* function qui va recuperer les infos de l'utilisateur connecté
*/
function infos_membre_connecte(){
global $bdd; // déclaration globale de BDD
$infos=array();
// Récupération variable de session PSEUDO
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
//préparation de la requete :
$sql = "SELECT * FROM utilisateurs WHERE pseudo = :pseudo";
$params = array(":pseudo"=>$pseudo);
//stocke la requête et les paramêtres dans la variable de retour (cela facilite le debogage au cas où ! )
$infos['sql'] = $sql;
$infos['params'] = $params;
//exécution de la requête
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
// on stocke le résultat de la requête dans un ARRAY
$result = $prepare->fetchall();
$infos['result'] = (count($result)>0) ? $result[0] : NULL;
} catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
// /!\ NE PAS OUBLIER DE FAIRE UN RETURN !!
print_r($infos);
return $infos;
}//Fin de la fonction
}
Mais cette ligne veut dire
$pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:'';
Si la variable de session 'pseudo' existe alors $pseudo est égale à cette variable sinon elle est égale à ' ' donc rien.
Donc la question était est ce que la variable $_SESSION['pseudo'] existe dans le sens de isset, est ce que tu la crée quelque part.
Après si tu ne comprend pas ce code, pourquoi est ce que tu l'utilises...

Pas dans le code que tu as posté. ...