Code php "SESSION UTILISATEUR" ne fonctionne pas

Résolu/Fermé
Zeropoint - Modifié le 11 mars 2018 à 11:47
 Zeropoint - 13 mars 2018 à 12:27
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.
A voir également:

2 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
11 mars 2018 à 08:05
Bonjour
Tu as bien mis un
session_start(); dans chaque fichier ?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
11 mars 2018 à 08:07
Et ton if me paraît bizarre...
if(isset($_SESSION['id']) AND !isset($_SESSION['name']))  


NOT isset name ? Tu es sûr... ?
0
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
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
11 mars 2018 à 12:37
Dans ton where tu ne dois pas avoir le password vu que tu le fais en password_verify ensuite
0
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
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
11 mars 2018 à 13:15
session_start ?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 12 mars 2018 à 06:30
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
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
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
12 mars 2018 à 06:33
Ç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
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
12 mars 2018 à 06:34
0
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
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
12 mars 2018 à 18:20

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