Cookies qui ne se créer pas..

Résolu/Fermé
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 - Modifié par jordane45 le 28/06/2015 à 17:46
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 28 juin 2015 à 20:20
Bonjour,
je suis un tutoriel pour créer une connexion persistante donc ceci https://www.grafikart.fr/tutoriels/cookie-php-souvenir-412 cependant au moment de créer un cookie j'ai un petit problème , le cookie ne veut pas se créer et je ne sais pas pourquoi pourtant j'ai fait comme dans le tuto et je me dis que ca doit etre un probleme de code donc j'ai chercher et je n'arrive pas a trouver voici mon code

 <?php 
  

     $bdd = new PDO ('mysql:host=localhost;dbname=connexion', 'root');

      

       if (!isset($_SESSION['pseudo']))
      
        {

        echo
          '

          <div class="connexion_case">
          <div class="title_connexion">Log In<img src="cadenas.png" class="cadenas"></div><!--PNG par [http://www.pngfactory.net/png/20638/Security] Auteur : Templatic.com-->
           <br />
           <form action="" method = "POST">
               <label for="pseudo" class="connexion_case_label"> Pseudo : </label>
               <br />
                <input type="texte" name = "pseudo" class="connexion_formulaire_case"/> 
                <br />
                <label for="password" class="connexion_case_label"> Password : </label> 
                <br />
                <input type="password" name = "password" class="connexion_formulaire_case"/> 
                <br />
                <input type="checkbox" name="check" /> Se souvenir de moi
                <br />
                <br />
                <button type="submit" name="connexion" class="connexion_button_2">Connexion</button>
              </form>
             
               ';
           



        }
     
       if(isset($_POST['connexion']))

         {
          

       $pseudo = addslashes($_POST["pseudo"]) ;
       

      // Hachage du mot de passe
      $pass_hache = sha1($_POST['password']);

      // Vérification des identifiants
      $user = $bdd->prepare("SELECT pseudo AND password AND id FROM membres WHERE pseudo = '$pseudo' AND password = '$pass_hache'");
      $user->execute(array(
            'pseudo' => $pseudo,
           'password' => $pass_hache));

      if (isset($_POST['check']))
         {
          setcookie('user_id' , $user->id , time() + 3600 * 24 * 3 , '/' , '/', false , true);
          
         }

      $resultat = $user->fetch();

       if ($resultat)
        {
          echo '<div class="mdp_id_granted">Vous êtes connecté !</div>';
          $_SESSION['pseudo'] = $pseudo;
             sleep(2);
             header('Location: index.php');
            
        }

       else
        {
            
               echo '<div class="mdp_id_error">Mauvais identifiant ou mot de passe !</div></div>';
        }

      
      
       
       }


      
     

     ?>


Voila , en fait je ne comprend pas pourquoi je ne vois pas mon erreur :(

Merci à ceux qui m'aideront
A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 28/06/2015 à 23:09
Déjà .... places ton code de connexion à la BDD dans un fichier à part .. qu'il te suffira d'inclure dans les pages où tu en auras besoins :
<?php
//------------------------------------------------//
//   ==> cnxBDD.php <==
//Fichier de connexion à la BDD
//------------------------------------------------//
$serveur = "localhost";
$dbname = "connexion";
$user = "root";
$pass = "";

try{
 $bdd = new PDO('mysql:host='.$serveur.';dbname='.$dbname, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
} catch (PDOException $e) {
   print "Erreur !: " . $e->getMessage() . "<br/>";
   die();
}


Ensuite.. le reste de ton code :
<?php
 //--------------------------------------------------------------------------------//
 // Démarrage des SESSIONS 
 //--------------------------------------------------------------------------------//
 if(session_id() == '') {
  session_start();
 } 

 //--------------------------------------------------------------------------------//
 //on inclu le fichier de connexion à la BDD
 //--------------------------------------------------------------------------------//
 require_once ("cnxBDD.php");

 //--------------------------------------------------------------------------------//
 // Récupération des variables
 //--------------------------------------------------------------------------------//
 $pseudo = !empty($_POST["pseudo"])?addslashes($_POST["pseudo"]):NULL;
 // Hachage du mot de passe
 $pass_hache = !empty($_POST["password"])?sha1($_POST['password']):NULL;
 // check
 $check = isset($_POST['check']) ? true : false;
 
 //--------------------------------------------------------------------------------//
 // traitement du SUBMIT :
 //--------------------------------------------------------------------------------//
 if(isset($_POST['connexion'])){
   // Vérification des identifiants
  try {
    $sql = "SELECT pseudo  
              ,password   
              ,id  
      FROM membres  
         WHERE pseudo = :pseudo 
   AND password = :password ";
 $params = array( ':pseudo'=> $pseudo, ':password' =>$pass_hache);
    $req = $bdd->prepare($sql);
 $req->execute($params);
 //on stocke le resultat dans un array
 $array_result = $req->fetchall();

  }catch(Exception $e){
  // en cas de soucis dans la requete :
   echo "<br>ERREUR ! ".$e->getMessage()."<br>";
   echo "<br>params : <br>";
   print_r($params);
  }

}
?>

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8" />
 <title>Quad Dutch Clan - Joins us !</title>
 <link rel="stylesheet" type="text/css" title="style" href="style.css"/>
</head>
<body>
 <?php 
   include("menu.php");
   
   // pour cocher la case si $check = true 
   $chkbchecked = $check ? "checked='checked'" : "";
   
   if (!isset($_SESSION['pseudo'])){
 echo " <div class='connexion_case'>
   <div class='title_connexion'>Log In<img src='cadenas.png' class='cadenas'></div><!--PNG par [http://www.pngfactory.net/png/20638/Security] Auteur : Templatic.com-->
    <br />
    <form action='' method = 'POST'>
     <label for='pseudo' class='connexion_case_label'> Pseudo : </label>
     <br />
   <input type='texte' name = 'pseudo' class='connexion_formulaire_case' value='".$pseudo."'/> 
   <br />
   <label for='password' class='connexion_case_label'> Password : </label> 
   <br />
   <input type='password' name = 'password' class='connexion_formulaire_case'/> 
   <br />
   <input type='checkbox' name='check' ".$chkbchecked." /> Se souvenir de moi
   <br />
   <br />
   <button type='submit' name='connexion' class='connexion_button_2'>Connexion</button>
    </form>";
 }
 
// Si la requête retourne un résultat (et un seul ! ) 
 if(count($array_result)==1){
   $id_user = $array_result['id'];

   if($check){
     // on créé le cookie
  echo "<br> echo le temps des tests : ... on créé le cookie !<br>";
     setcookie('user_id',$id_user , time() + 3600 * 24 * 3 , '/' , '/', false , true);
  
  // Pour les tests.. on vérifie si le cookie est bien créé :
  print_r($_COOKIE);
  if(isset($_COOKIE['user_id']){
   echo " <br> Yes ! Le cookie existe !";
  }
  
   }
   echo "<div class='mdp_id_granted'>Vous êtes connecté !</div>";
   $_SESSION['pseudo'] = $pseudo;
   $_SESSION['user_id'] = $id_user;
   /* sleep(2);
   header('Location: index.php');*/
  
 }else {
   echo "<div class='mdp_id_error'>Mauvais identifiant ou mot de passe !</div>";
 }

 ?>
 </body>
</html>


Cordialement,
Jordane
1
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
28 juin 2015 à 17:50
As-tu vérifié que tu passais bien dans la partie générant le cookie ? (avec un echo par exemple)
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 28/06/2015 à 17:53
Bonjour,

Ton principal souci ne se trouve pas (selon moi..) dans la création du cookie ... mais dans l'écriture de ta requête ...

 $user = $bdd->prepare("SELECT pseudo AND password AND id FROM membres WHERE pseudo = '$pseudo' AND password = '$pass_hache'");


... Pour choisir des "champs" dans un "SELECT" ... ce ne sont pas des AND qu'il faut utiliser.... mais des VIRGULES !
.. et si tu utilises le execute avec un ARRAY.. il ne fait pas mettre les variables directement dans ta requête ...


bref.. essayes ceci :
(j'ai ajouté un bloc try/catch pour intercepter les erreurs dans la requête a cas où ! )

try{
   $sql = "SELECT pseudo 
                ,password 
               ,id 
             FROM membres 
             WHERE pseudo = :pseudo
             AND password = :password ";

  $params = array( ':pseudo'=> $pseudo, ':password' =>$pass_hache);

  $user = $bdd->prepare($sql);
  $user->execute($params);

}catch(Exception $e) {
    // en cas de soucis dans la requete :
     echo "<br>ERREUR ! ".$e->getMessage()."<br>";
     echo "<br>params : <br>";
     print_r($params);
   }





Cordialement,
Jordane
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
28 juin 2015 à 17:55
Tu as aussi un PB après..... tu fais un FETCH ... mais après ton IF ... donc.. ça ne marchera pas !
 $resultat = $user->fetch();
 if (isset($_POST['check'])) {
     setcookie('user_id' , $resultat ->id , time() + 3600 * 24 * 3 , '/' , '/', false , true);
  }

     

0
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
28 juin 2015 à 17:57
Oui j'ai du mal avec les SELECT etc , promis je vais revoir sa dans les cours PHP ! Si je me connecte il m'affiche ceci "Notice: Undefined property: PDOStatement::$id in C:\wamp\www\tests\connexion.php on line 91"
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017
Modifié par jordane45 le 28/06/2015 à 18:03
Tu peux nous poster le code complet corrigé .. qu'on essayes de voir ce qui pourrait bloquer ?

Et puis.. au cas où, essayes ceci :
$resultat = $user->fetch(PDO::FETCH_OBJ);
 if (isset($_POST['check'])) {
     setcookie('user_id' , $resultat->id , time() + 3600 * 24 * 3 , '/' , '/', false , true);
  }
0
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
Modifié par jordane45 le 28/06/2015 à 19:47
Oui excuse moi je n'ai pas vu ton message avant que je corrige j'ai recorigé fin plutot copier/coller a la place
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
   <title>Quad Dutch Clan - Joins us !</title>
     <link rel="stylesheet" type="text/css" title="style" href="style.css"/>
   
   
   </head>
 
 
 
    <body>
  
  <?[/contents/1351-php-introduction php] include("menu.php"); ?>
   
  <?php 
  

     $bdd = new PDO ('mysql:host=localhost;dbname=connexion', 'root');

      

       if (!isset($_SESSION['pseudo']))
      
        {

        echo
          '

          <div class="connexion_case">
          <div class="title_connexion">Log In<img src="cadenas.png" class="cadenas"></div><!--PNG par [http://www.pngfactory.net/png/20638/Security] Auteur : Templatic.com-->
           <br />
           <form action="" method = "POST">
               <label for="pseudo" class="connexion_case_label"> Pseudo : </label>
               <br />
                <input type="texte" name = "pseudo" class="connexion_formulaire_case"/> 
                <br />
                <label for="password" class="connexion_case_label"> Password : </label> 
                <br />
                <input type="password" name = "password" class="connexion_formulaire_case"/> 
                <br />
                <input type="checkbox" name="check" /> Se souvenir de moi
                <br />
                <br />
                <button type="submit" name="connexion" class="connexion_button_2">Connexion</button>
              </form>
             
               ';
           



        }
     
       if(isset($_POST['connexion']))

         {
          

       $pseudo = addslashes($_POST["pseudo"]) ;
       

      // Hachage du mot de passe
      $pass_hache = sha1($_POST['password']);

      // Vérification des identifiants
      try
       {

           $sql = "SELECT pseudo  ,password   ,id  FROM membres  WHERE pseudo = :pseudo AND password = :password ";

           $params = array( ':pseudo'=> $pseudo, ':password' =>$pass_hache);

          $user = $bdd->prepare($sql);
          $user->execute($params);

       }
       
      catch(Exception $e)
        {
           // en cas de soucis dans la requete :
            echo "<br>ERREUR ! ".$e->getMessage()."<br>";
            echo "<br>params : <br>";
            print_r($params);
          }

      

      $resultat = $user->fetch();


       if (isset($_POST['check'])) 
         {
             
             setcookie('user_id' , $resultat ->id , time() + 3600 * 24 * 3 , '/' , '/', false , true);
   
         }

       if ($resultat)
        {
          echo '<div class="mdp_id_granted">Vous êtes connecté !</div>';
          $_SESSION['pseudo'] = $pseudo;
            /* sleep(2);
             header('Location: index.php');*/
            
        }

       else
        {
            
               echo '<div class="mdp_id_error">Mauvais identifiant ou mot de passe !</div></div>';
        }

      
      
       
       }


      
     

     ?>

 </body>

</html>


Et la j'ai l'erreur 'Trying to get property of non-object in C:\wamp\www\tests\connexion.php on line 97'

Si j'essaye avec ce que tu viens de mettre je n'ai plus d'erreur sauf que le cookie n'est toujours pas créer apparement quand je fais <?php var_dump($_COOKIE['user_id']); ?> il m'affiche l'erreur "Notice: Undefined index: user_id in C:\wamp\www\tests\index.php on line 30" et en dessous de l'erreur il met null


EDIT : Ajout du LANGAGE dans les balises de code.
0
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
28 juin 2015 à 20:02
Je viens seulement de voir l'EDIT , mais je ne comprend pas j'ai ré-essayer avec le code que j'ai mis j'avais l'erreur obj donc j'ai remis $resultat = $user->fetch(PDO::FETCH_OBJ); mais je me suis rappeller pour créer un cookie il ne faut pas le mettre avant tout le code HTML ?
0