Cookies qui ne se créer pas..
Résolu
Legrandfifou
Messages postés
109
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
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
Voila , en fait je ne comprend pas pourquoi je ne vois pas mon erreur :(
Merci à ceux qui m'aideront
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:
- Cookies qui ne se créer pas..
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
3 réponses
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 :
Ensuite.. le reste de ton code :
Cordialement,
Jordane
<?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
Bonjour,
Ton principal souci ne se trouve pas (selon moi..) dans la création du cookie ... mais dans l'écriture de ta requête ...
... 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ù ! )
Cordialement,
Jordane
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
Oui excuse moi je n'ai pas vu ton message avant que je corrige j'ai recorigé fin plutot copier/coller a la place
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.
<!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.