Barre menu s'affiche malgré deconnexion

[Résolu/Fermé]
Signaler
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
-
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
-
Bonjour,

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 :)

9 réponses

Messages postés
33467
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2021
3 716
Bonjour,

Avec un IF !
Tu testes si l'utilisateur est connecté ou non... et en fonction.. tu affiches ou pas.

Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
je l'ai déjà ce if
Messages postés
33467
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2021
3 716
Où ça ?
Pas dans le code que tu as posté. ...
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
C'est dans quelle page exactement que je dois mettre le if ? login.php ?
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
Voici mon login.php :
<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>
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9 >
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017

entendu !
if(isset($_SESSION['login']))
{
// la totalité du code que tu veux afficher lors de la connexion donc par exemple :
include('functions/membre.func.php');
include('body/header.php');
include('body/menu.php');
}
else
{
header("Location: index.php?page=login")
}  


ceci est-il correct ?
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Oui et non.

Le IF => c'est ce que voit l'utilisateur connecté et que l'utilisateur deconnecté ne voit pas.
Le ELSE => c'est ce que voit un utilisateur non connecté et que l'utilisateur connecté ne voit pas.

ce if et ce else servent juste à dire affiche ou n'affiche pas et dedans il y a du html

Donc ton cas marche surement mais un utilisateur déconnecté ne verra rien d'autre que la page login (et si c'est cela que tu cherches c'est bon !)
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9 >
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017

Oui tout à fait c'est ce que je voulais :)
c'est correct si je le positionne comme ceci ?
<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>
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Précision si tu veux que les deux (user connecté et deconnecté) voient tout les deux le html, tu met le code ni dans le if ni dans le else mais en dessous.
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9 >
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017

pour l'instant j'aimerai laisser comme ceci j'ai pas mis de formulaire de connexion sur ma page d'acceuil ^^
le code est donc correct ?
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
pourquoi mon menu ne s'affiche plus dans aucune de mes pages maintenant alors que je fais les nclude partout ?
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Pour faire simple :

Si je suis connecté => affichage du header et du menu
Si je suis déconnecté => Affichage du menu de connexion
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Si tu veux que le header s'affiche pour les deux (ce serait plus logique) ce sera :
include('body/header.php');
<?php

include('body/header.php'); // AVANT le IF

if(isset($_SESSION['login']))
{
include('body/menu.php');
}
else
{
?>
<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>
<?php
}
?>
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9 >
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017

j'ai : La page n'est pas redirigée correctement :/
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Enlève ton header location et tu n'auras pas ça...
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9 >
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017

j'ai retiré cette ligne :
header("Location:index.php?page=membre"); 

mais j'ai le meme ceci :(
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Quel est l'URL sur lequel il tente de rediriger ton site?
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 !)
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
la variable info n'apparait pas...
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Eh bien il faut voir ce qu'elle donne... tester la fonction, faire des echo etc.. comme d'habitude logiquement si tu fais des fonctions comme celle-là, après si tu les copie colle il est normal que ce soit difficile de les manipuler.
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9 >
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017

la requête fonctionne dans ma bdd :
SELECT * FROM utilisateurs WHERE pseudo = 'xzak47'
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
le return infos ne marche pas
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Qu'est ce que tu as testé? Tu as fait des "echo" dans la fonction comme suggéré ? Pour voir ce que valait ta variable à chaque moment de la fonction ?
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
ça va mieux, mtn j'ai ceci : Notice: Undefined index: avatar in C:\wamp\www\rs\pages\membre.php on line 16

 <?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> 
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Tu ne fermes pas ta première div class info.

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']; ?>
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
correction :
<?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
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
Il manquait un "s" à infos, j'ai maintenant pas d'erreurs mais aucune info ne s'affiche :
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Tu es connecté ?

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... ?
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
oui il y est :
<?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
}
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Non mais j'ai vu qu'il y était.. et tu aurais pu me renvoyer juste la ligne.

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...
Messages postés
984
Date d'inscription
lundi 27 avril 2015
Statut
Membre
Dernière intervention
18 décembre 2020
9
Resolu merci :)