bonjour a tous je viens de creer un petit site

mais je bloque avec la notion des sessions et surtout le php

pour certains d entre vous cela pourra sembler tres facile n de on cote cela fait des jours que je cherche et pourtant surement si simple a realiser

je souhaiterais que les boutons inscription et connexion ne soit affiche que pour les visiteurs et que pour les membres cela soit juste inscrit deconexion

je vous presente un code mais qui ne fonctionne pas merci d avance pour l aide le voici

Ce que je fais

en deut de code

    <?php
session_start();
?>

au niveau du menu

php
<?php if (isset($_SESSION['id'])) { ?>

                                <li><a href="profil.php"> Accueil </a></li>
                                <li><a href="déconnexion.php"></a>deconnexion</li>
<?php } 
else { ?>

                                <li><a href="connexion.php"> connexion  </a></li>
                                <li><a href="inscription.php"></a>inscription</li>
   <?php } ?>`

Ce que je veux

c est que lorsque le membre soit conecte il puisse voir que deconexion
et que le visiteur puisse voir inscription /connexion

Ce que j'obtiens

rien cela ne fonctionne pas

20 réponses


Carouge10
Réponse acceptée

en passant ta souris sur une réponse, tu vas voir apparaitre "ce post m'a permi de résoudre mon problème" ou quelque chose du genre

Bonsoir,
Comment renseignes-tu l'id dans la session ?

Je te déconseille de mettre des caractères accentués dans les noms de fichiers. C'est source de problème

As-tu tester ce que contient $_SESSION avec la fonction var_dump() ?

bonsoir
merci pour la reponse
euhhhh pour la renseigner je dois faire comment stp
comme ceci peut etre
$_SESSION['id'] = 'id';

pour voir ce que contient $_session je dois faire ceci ?

var_dump($_SESSION);

bonsoir,

je peux constater des fautes dans votre php.
resnseigner vous comment on utilise des if et des else

<?php if ($_SESSION['id']): ?>

<?php else: ?>

<?php endif; ?>

Non, aucune faute, les 2 façons sont exactes
Oui tu le renseignes comme tu le montres dans la partie "login"

carouge10 j ai pas compris

l'affectation de la session est faite quand tu te connectes donc sur la page "connexion"

as tu tu veux dire la connexion a la base de donnee

le contenu de ma page connexion est le suivant

<?php 
session_start();

       include('base.php');

include('config_cookie.php');

          if(isset($_POST['entres']))

               {
                 $pseudo = htmlspecialchars($_POST['pseudo']);
                  $passe = password_hash($_POST['passe'], PASSWORD_DEFAULT);

               if(!empty($_POST['pseudo']) AND !empty($_POST['passe']))
                {

                             $req = $bdd->prepare('SELECT id, passe FROM membres WHERE pseudo = :pseudo');
                              $req->execute(array(
                                         'pseudo' => $pseudo));

                          $info = $req->fetch();        

                       if (password_verify($_POST['passe'], $info['passe'])) 

                       {

                           if(isset($_POST['souvenir']) AND !empty($_POST['souvenir']))

                        {
                        setcookie('id',$info['id'],time()+3600*24*365,null,null,false,true);                  
                        setcookie('pseudo',$pseudo,time()+3600*24*365,null,null,false,true);
                        setcookie('passe',$info['passe'],time()+3600*24*365,null,null,false,true);

                           }

                         if ($info)
                          {
                                      session_start();
                                          $_SESSION['id'] = $info['id'];
                                           $_SESSION['pseudo'] = $pseudo;
                             setcookie('pseudo',$pseudo,time()+3600*24*365,null,null,false,true);

                              header('Location: accueil-peche-perle.php');
                              echo 'Vous êtes connecté !';
                         }
                         }
                            else{
                                echo 'Mauvais mot de passe ou mauvais pseudo !';
                               }
                             }
                            else
                                {
                                  echo 'Tous les champs ne sont pas complétés !';
                                }
                     }
         ?>

d'accord donc l'affectation est bien faite.
Fais-moi plaisir et vire-moi ce htmlspecialchars qui n'a rien à faire dans ce code. C'est UNIQUEMENT à l'affichage)
Ainsi que le second "session_start" dans le "if($info)" car il ne doit il y en avoir un seul

Question de logique, tu affectes la variables $_POST['pseudo'] avant de vérifier qu'elle ne soit pas vide. C'est plûtot le contraire. (Tu vérifies avoir de l'essence avant de prendre la route)
Donc ceci :

$pseudo = htmlspecialchars($_POST['pseudo']);
                  $passe = password_hash($_POST['passe'], PASSWORD_DEFAULT);

               if(!empty($_POST['pseudo']) AND !empty($_POST['passe']))
                {

devrait être

if(!empty($_POST['pseudo']) AND !empty($_POST['passe']))
{
    $pseudo = $_POST['pseudo'];
    $passe = password_hash($_POST['passe'], PASSWORD_DEFAULT);

Pour finir, que donne un "var_dump($_SESSION);" sur ton menu, juste après ton "session_start" du menu

un tout tres grand merci pour la correction
donc voici ce que j ai avec le var_dump
en debut de page

array (size=2)
  'id' => string '15' (length=2)
  'pseudo' => string 'phil1' (length=5)

cela semble fonctionner ...
peut etre u mot d explication , merci

du coup tu as bien la 1ère partie du if qui s'affiche ?

Je viens de voir aussi que les 2ème liens ne sont pas correct, les textes ne sont pas dans la balise "a" comme pour accueil et profil

en fait
j ai tout
donc si je me connecte j ai bien deconnexion qui s affiche
si je me deconnecte j ai bien inscription et connexion qui s affiche
mais je suis dans les essais pour l instant

car je fonctionnais d une autre maniere
j avais deux pages d acceuil une pour les visiteurs et une pour les membres

l exemple donne etait juste pour me donner une idee mon vrai code est le suivant

<?php if (isset($_SESSION['id'])) { ?>

                                <a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="deconnexion_perle.php">deconnexion</a> 
<?php } 
else { ?>

        <ul class="navbar-nav lg-auto"> <a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="inscription_perle.php">Inscription</a>
            <a class="bg-primary text-white" style="margin-top:10px;" href="connexion_perle.php">connexion</a> </ul>
   <?php } ?>`

je ne comprends pas.
Au début, tu dis que le code ne fonctionne pas et après si mais ce n'est pas le vrai code .....
donc ton problème est résolu ?

en fait je ne savais pas comment faire
j ai donc pris un exemple que j ai trouve sur le net

php
<?php if (isset($_SESSION['id'])) { ?>

                                <li><a href="profil.php"> Accueil </a></li>
                                <li><a href="déconnexion.php"></a>deconnexion</li>
<?php } 
else { ?>

                                <li><a href="connexion.php"> connexion  </a></li>
                                <li><a href="inscription.php"></a>inscription</li>
   <?php } ?>`

puis je l ai adapte pour qu il puisse s integrer a mon code

<?php if (isset($_SESSION['id'])) { ?>

                                <a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="deconnexion_perle.php">deconnexion</a> 
<?php } 
else { ?>

        <ul class="navbar-nav lg-auto"> <a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="inscription_perle.php">Inscription</a>
            <a class="bg-primary text-white" style="margin-top:10px;" href="connexion_perle.php">connexion</a> </ul>
   <?php } ?>`

donc tout semble fonctionner mais j ai encore une question si je peux me permettre

   <?php
session_start();
?>

fais suivre sur la page les identifiants de connection de la page connexion ?

donc au dessus de chaque page que seul les membres connecte peuvent visualiser je dois juste indiquer

   <?php
session_start();
?>

ou plutot cela est juste valable pour le navbar

le session_start lance la session.
La session est valable sur toute les pages tant que tu lances la session en début de code.
Il suffit de revoir le cours sur les sessions

Autre infos, dans la balise "ul", il y a forcément la balise "li", cf la doc

en tous cas un super tres grand merci
pour les infos et l aide
tout est ok
je pense que cela va en aider plus d un

pense à passer ton sujet en résolu, merci

comment je dois faire

ah voila encore merci
bonne nuit