Code php "SESSION UTILISATEUR" ne fonctionne pas

Résolu
Zeropoint -  
 Zeropoint -
Bonjour, j'ai un problème avec mon code php qui ne fonctionne pas.

<?php

    try
    {
        $db = new PDO('mysql:host=localhost; dbname=web','root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }

    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }

    if(isset($_POST['login']) && isset($_POST['password']))
    {
        $name;
        $query = $db->prepare('SELECT * FROM admin WHERE login = :login AND password = :password');
        $query->execute(array(
            'login' => $_POST['login'],
            'password' => $_POST['password']));

        $return = $query->fetch();

        if ($_POST['password'] == $return['password'])
        {
            session_start();

            $_SESSION['id'] = $return['id'];
            $_SESSION['login'] = $return['login'];
            $_SESSION['name'] = $return['name'];
        }

        else {
            echo 'mot d passe incorrect';
        }
    }
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <link rel="stylesheet" type="text/css" href="style/style.css" />
        <title>Portfolio Avner</title>
     <script src="js/jquery.min.js"></script>
        <script src="js/jquery.sticky.js"></script>
        <script>
            $(window).load(function(){
              $("nav").sticky({ topSpacing: 0 });
            });
        </script>
    </head>
    <body>
        <?php include ('block/header.php'); ?>
        <!-- CONTENU DYNAMIQUE DE LA PAGE -->
        <div id="contenu">
            <?php include ('block/login.php'); ?>
            <div id="corps">
            <?php include ('block/articles.php'); ?>
            </div>
        <!-- FIN DU CONTENU DYNAMIQUE DE LA PAGE -->
        </div>
        <!-- FOOTER -->
        <div class="space"></div>
        <?php include ('block/footer.php'); ?>
    </body>
</html>


<aside>
    <form method="post" action="">
        <fieldset>
            <legend> Interface Admin </legend>
<?php

if (isset($_SESSION['id']) AND !isset($_SESSION['name']))
{
    echo '<p>Bienvenue <span style="color: rgb(0, 117, 255);">' . $_SESSION['name'] . '</span> !</p>
    <p>-> <a href="index.php?logout=0" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>';
}

else
{
?>

    <label for="login">Identifiant</label> : <input type="text" name="login" id="login" placeholder="Identifiant" required />
    <br /><br />
    <label for="pass">Mot de Passe</label> : <input type="password" name="password" id="pass" placeholder="Password" required /><br /><br />
    <input type="submit" value="Connexion" id="submit" />

<?php
}
?>
        </fieldset>
    </form>
</aside>


Merci d'avance.

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour
    Tu as bien mis un
    session_start(); dans chaque fichier ?
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Et ton if me paraît bizarre...
      if(isset($_SESSION['id']) AND !isset($_SESSION['name']))  


      NOT isset name ? Tu es sûr... ?
      0
    2. Zeropoint
       
      J'ai corrigé un peu le code j'ai essayé ça mais j'ai un problème de mot de passe non reconnu.

      else
      {
          $login = $_POST['login'];
          $pass = $_POST['password'];
          $query = $db->prepare('SELECT * FROM admin WHERE login = :login AND password = :password');
          $query->execute(array(
              'login' => $login,
              'password' => $pass));
          $return = $query->fetch();
      
          $isPasswordCorrect = password_verify($pass, $return['password']);
      
          if (!$return)
          {
              echo 'Pas de résultat !';
          }
      
          else
          {
              if ($isPasswordCorrect == TRUE)
              {
                  session_start();
                  $_SESSION['id'] = $return['id'];
                  $_SESSION['name'] = $return['name'];
                  $_SESSION['login'] = $_POST['login'];
                  echo 'Vous êtes connecté !';
              }
      
              else
              {
                  echo 'Mot de passe incorrect !';
              }
          }
      }
      
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Dans ton where tu ne dois pas avoir le password vu que tu le fais en password_verify ensuite
      0
    4. Zeropoint
       
      J'ai encore bien modifié et arrangé mon code.
      La session fonctionne mais le nom d'utilisateur ne s'affiche pas.


      <?php

      if (!isset($_POST['login']) && !isset($_POST['password']))
      {
      if (isset($_SESSION['name']) AND isset($_SESSION['login']))
      {
      ?>
      <aside>
      <form method="get" action="">
      <fieldset>
      <legend> Interface Admin </legend>

      <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php $_SESSION['name']; ?> </span>!</p>
      <p>-> <a href="?logout" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>
      <?php
      }

      else
      {
      ?>
      <aside>
      <form method="post" action="">
      <fieldset>
      <legend> Interface Admin </legend>

      <label for="login">Identifiant</label> : <input type="text" name="login" id="login" placeholder="Identifiant" required />
      <br /><br />
      <label for="pass">Mot de Passe</label> : <input type="password" name="password" id="pass" placeholder="Password" required /><br /><br />
      <input type="submit" value="Connexion" id="submit" />
      <?php
      }
      }

      else
      {
      $login = $_POST['login'];
      $pass = $_POST['password'];
      $query = $db->query('SELECT * FROM admin');

      while($return = $query->fetch())
      {
      if ($login == $return['login'] AND $_POST['password'] == $return['password'])
      {
      session_start();
      $_SESSION['name'] = $return['name'];
      $_SESSION['login'] = $_POST['login'];
      ?>
      <aside>
      <form method="get" action="">
      <fieldset>
      <legend> Interface Admin </legend>

      <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php $_SESSION['name']; ?> </span>!</p>
      <p>-> <a href="?logout" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>
      <?php
      }

      else
      {
      ?>
      <aside>
      <form method="get" action="">
      <fieldset>
      <legend> Interface Admin </legend>
      <span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>
      <?php
      }
      }
      }
      ?>
      </fieldset>
      </form>
      </aside>
      0
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      session_start ?
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Ton code est sacrément bordelique... :-)
    Tu répètes plusieurs fois les mêmes bouts de code...
    On ne sait plus où on se trouve ni à quoi ils servent...

    Je te propose un truc du genre :
      <?php
      //démarrage des sessions
      session_start();
    
      //Affichage des erreurs PHP
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
    
      //récupération PROPRE des variables AVANT de les utiliser !
      $name = !empty($_SESSION['name']) ? $_SESSION['name'] : NULL;
      $login = !empty($_POST['login']) ? $_POST['login'] : NULL;
      $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
      $logout = !empty($_GET['logout']) && $_GET['logout']==true ? $_GET['logout'] : NULL;
      
      //je te laisse compléter le traitement du logout si nécéssaire...
      if($logout){
        session_destroy();
        //...
      }
    
      //---------------------------//
      //début du traitement
      //---------------------------//
    
       if($name){
         //si utilisateur déjà logué.. include de la page welcome and logout
         ?>
         <aside>
          <fieldset>
            <legend> Interface Admin </legend>
            <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php echo $name; ?> </span>!</p>
            <p>-> <a href="?logout=true" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>
          </fieldset>
     
        <?php 
       }else{
         //sinon.. affichage gestion de la connexion si un login et un password sont envoyés en POST...
         if($login && $password){
           //on prépare les données de la requête
           $datas = array('login' => $login);
           $sql = 'SELECT * FROM admin WHERE login = :login';
           //on place CHAQUE requête dans un bloc TRY/CATCH pour trapper les éventuelles erreurs !
           try{
             $query = $db->prepare($sql);
             $query->execute($datas);
             $return = $query->fetch();
           }catch(Exception $e){
             echo "Erreur dans la requête " . $sql . " <br> Erreur : ". $e->getMessage();
           }
           $userExist = !empty($return) ? true : false;  
           if($userExist){
            $isPasswordCorrect = password_verify($password, $return['password']);
            if($isPasswordCorrect){
              //utilisateur authentifié.. on rempli les variables de session
              $_SESSION['name'] = !empty($return['name']) ? $return['name'] : NULL;
              $_SESSION['id'] = !empty($return['id']) ? $return['id'] : NULL;
              $_SESSION['login'] = !empty($return['login']) ? $return['login'] : NULL;
              
            }else{
              //Mauvais password !
              // tu peux mettre un message si tu le souhaites
              //...
              echo "<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>";
            }
           }else{
            //user inconnu !
            // tu peux mettre un message si tu le souhaites
            //...
            echo "<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>";
           }
         }
        ?>
        <!-- Connexion admin -->
         <form method="post" action="">
            <fieldset>
              <legend> Interface Admin </legend>
              <label for="login">Identifiant</label> : <input type="text" name="login" id="login" placeholder="Identifiant" required />
              <br /><br />
              <label for="pass">Mot de Passe</label> : <input type="password" name="password" id="pass" placeholder="Password" required /><br /><br />
              <input type="submit" value="Connexion" id="submit" name="submit" />
            </fieldset>
         </form>
      <?php
      }
      ?>
            
      </aside>
    


    NB: Tu noteras que je te mets le code avec la coloration syntaxique... (la couleur...)
    C'est quand même plus lisible....
    Il serait temps que tu le fasses aussi !
    Infos ici: https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

    Il serait bien aussi que tu lises (et appliques ) le contenu des deux liens suivants :
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
    0
    1. Zeropoint
       
      Merci pour l'aide. Ton code par contre me renvoie une erreur au niveau des guillemets.

            }else{
              //Mauvais password !
              // tu peux mettre un message si tu le souhaites
              //...
              echo "<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>";
            }
           }else{
            //user inconnu !
            // tu peux mettre un message si tu le souhaites
            //...
            echo "<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>";
           }
      


      J'ai donc arrangé:

            }else{
              //Mauvais password !
              // tu peux mettre un message si tu le souhaites
              //...
              echo '<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>';
            }
           }else{
            //user inconnu !
            // tu peux mettre un message si tu le souhaites
            //...
            echo '<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>';
           }
      


      Il reste tout de même l'erreur:
      Notice: Undefined index: name in /Applications/MAMP/htdocs/test.php on line 43
      .

          <fieldset>
            <legend> Interface Admin </legend>
            <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php echo $_SESSION['name']; ?> </span>!</p>
            <p>-> <a href="?logout=true" name="logout" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>
          </fieldset>
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Ça n'est pas dans le code que je t'ai donné...
      Et si tu as lu les liens... Récupère proprement les variables AVANT de les utiliser
      0
    3. Zeropoint
       
      Le seul problème est le mot de passe considéré comme incorrect.

      C'est à dire je rentre les bonnes coordonnées mais la session ne s'ouvre pas.
      J'ai une réponse: mot de passe incorrect.

      <?php
      
      try
      {
          $db = new PDO('mysql:host=localhost; dbname=web','root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
      }
      
      catch(Exception $e)
      {
          die('Erreur : '.$e->getMessage());
      }
      
      //démarrage des sessions
      session_start();
      
      //Affichage des erreurs PHP
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      //récupération PROPRE des variables AVANT de les utiliser !
      $name = !empty($_SESSION['name']) ? $_SESSION['name'] : NULL;
      $login = !empty($_POST['login']) ? $_POST['login'] : NULL;
      $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
      $logout = !empty($_GET['logout']) && $_GET['logout']==true ? $_GET['logout'] : NULL;
      
      //je te laisse compléter le traitement du logout si nécéssaire...
      if($logout){
        session_destroy();
        //...
      }
      
      //---------------------------//
      //début du traitement
      //---------------------------//
      
       if($name){
         //si utilisateur déjà logué.. include de la page welcome and logout
         ?>
         <aside>
          <fieldset>
            <legend> Interface Admin </legend>
            <p>Bienvenue <span style="color: rgb(0, 117, 255);"> <?php echo $name; ?> </span>!</p>
            <p>-> <a href="?logout=true" style="color: rgb(255, 99, 0);">Déconnexion</a> <-</p>
          </fieldset>
      
        <?php
       }else{
         //sinon.. affichage gestion de la connexion si un login et un password sont envoyés en POST...
         if($login && $password){
           //on prépare les données de la requête
           $datas = array('login' => $login);
           $sql = 'SELECT * FROM admin WHERE login = :login';
           //on place CHAQUE requête dans un bloc TRY/CATCH pour trapper les éventuelles erreurs !
           try{
             $query = $db->prepare($sql);
             $query->execute($datas);
             $return = $query->fetch();
           }catch(Exception $e){
             echo "Erreur dans la requête " . $sql . " <br> Erreur : ". $e->getMessage();
           }
           $userExist = !empty($return) ? true : false;
           if($userExist){
            $isPasswordCorrect = password_verify($password, $return['password']);
            if($isPasswordCorrect){
              //utilisateur authentifié.. on rempli les variables de session
              $_SESSION['name'] = !empty($return['name']) ? $return['name'] : NULL;
              $_SESSION['id'] = !empty($return['id']) ? $return['id'] : NULL;
              $_SESSION['login'] = !empty($return['login']) ? $return['login'] : NULL;
      
            }else{
              //Mauvais password !
              // tu peux mettre un message si tu le souhaites
              //...
              echo '<span style="color: rgb(0, 117, 255);">Mot de passe incorrect !</span>';
            }
           }else{
            //user inconnu !
            // tu peux mettre un message si tu le souhaites
            //...
            echo '<span style="color: rgb(0, 117, 255);">Utilisateur inconnu !</span>';
           }
         }
        ?>
        <!-- Connexion admin -->
         <form method="post" action="">
            <fieldset>
              <legend> Interface Admin </legend>
              <label for="login">Identifiant</label> : <input type="text" name="login" id="login" placeholder="Identifiant" required />
              <br /><br />
              <label for="pass">Mot de Passe</label> : <input type="password" name="password" id="pass" placeholder="Password" required /><br /><br />
              <input type="submit" value="Connexion" id="submit" name="submit" />
            </fieldset>
         </form>
      <?php
      }
      ?>
      
      </aside>
      
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       

      Le seul problème est le mot de passe considéré comme incorrect.

      Comment as tu stocké le password en bdd ?

      Fais nous un print_r de ta variable $return et montre nous le résultat...
      0