Besoin d'aide je narrive pas redirer vers ma page de connexion....
Résolu
caro
-
caro -
caro -
A voir également:
- Besoin d'aide je narrive pas redirer vers ma page de connexion....
- Gmail connexion - Guide
- Impossible de supprimer une page word - Guide
- Site inaccessible n'autorise pas la connexion - Guide
- Faire de google ma page d'accueil - Guide
- Numéro de page word - Guide
16 réponses
ok merci jordan vous avez raison jai enlever le die et kan jexecute il me redirige efrectivement vers ma page de connexion.. maintenant kan je me connect il me met cette erreur la:!!
Erreur fatale : exception PDO non capturée: SQLSTATE [HY093]: numéro de paramètre non valide: le nombre de variables liées ne correspond pas au nombre de jetons dans C: \ xampp \ (Array) # 1 a la ligne 18
la ligne 18 correspond a $req->execute(['pseudo' =>$pseudo]);
Erreur fatale : exception PDO non capturée: SQLSTATE [HY093]: numéro de paramètre non valide: le nombre de variables liées ne correspond pas au nombre de jetons dans C: \ xampp \ (Array) # 1 a la ligne 18
la ligne 18 correspond a $req->execute(['pseudo' =>$pseudo]);
// recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL; $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL; $req = $bdd->prepare('SELECT * FROM tblusers WHERE (pseudo = :psdoconnect OR email = :psdoconnect)'); $req->execute(['pseudo' => $pseudo]); $user = $req->fetch(); if($user == null){ $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; } elseif(password_verify($mdp, $user->password)){ $_SESSION['auth'] = $user; $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté'; header('Location: boutique.php'); exit(); } else { $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; }
jai trouvé mon erreur merci jordan mais il me met encore une autrte erreur ci dessous
Notice: Trying to get property 'Password' of non-object
la ligne concernée cest celle ci:
Notice: Trying to get property 'Password' of non-object
la ligne concernée cest celle ci:
elseif(password_verify($mdp, $user->Password))
voici le contenu de la class user
<?php class user { private $bdd = null; function __construct($bdd) { $this->bdd = $bdd; } public function dbExec($sql, $datas = NULL) { //Execution de la requete try { $requete = $this->bdd->prepare($sql); $requete->execute($datas); } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); } return $requete; } public function getUserBypseudo($pseudo) { $sql = 'SELECT id FROM tblusers WHERE pseudo = ?'; $datas = array($pseudo); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function getUserByemail($email) { $sql = 'SELECT id FROM tblusers WHERE Email = ?'; $datas = array($email); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function addUser($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo){ //cryptage du mot de passe $mdp = password_hash($mdp, PASSWORD_BCRYPT); //insertion en BDD $sql = "INSERT INTO tblusers (pseudo, Password, Firstname, Lastname, Email, contact, avatar) values (?,?,?,?,?,?,?) "; $datas = array($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo); $res = $this->dbExec($sql,$datas); return $res; } /** * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password */ public function authentification($pseudo,$mdp){ $user = $this->getUserByPseudo($pseudo); //verifie qu'il n'y a bien qu'un seul user avec ce pseudo.. if(!empty($user) && count($user)==1){ $mdpBdd = $user[0]['password']; if (password_verify($mdp, $mdpBdd)){ return $user; }else{ return false; } } } } ?>
effectivement jai toujour la classe user jai vu la partie authentification mais je ne savait pas comment lutiliser avec la partie connexion je me suis dit quil avait besoin du code ci dessus...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question<?php class user { private $bdd = null; function __construct($bdd) { $this->bdd = $bdd; } public function dbExec($sql, $datas = NULL) { //Execution de la requete try { $requete = $this->bdd->prepare($sql); $requete->execute($datas); } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); } return $requete; } public function getUserBypseudo($pseudo) { $sql = 'SELECT * FROM tblusers WHERE pseudo = ?'; $datas = array($pseudo); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function getUserByemail($email) { $sql = 'SELECT * FROM tblusers WHERE Email = ?'; $datas = array($email); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function addUser($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo){ //cryptage du mot de passe $mdp = password_hash($mdp, PASSWORD_BCRYPT); //insertion en BDD $sql = "INSERT INTO tblusers (pseudo, Password, Firstname, Lastname, Email, contact, avatar) values (?,?,?,?,?,?,?) "; $datas = array($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo); $res = $this->dbExec($sql,$datas); return $res; } /** * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password */ public function authentification($pseudo,$mdp){ $user = $this->getUserByPseudo($pseudo); //verifie qu'il n'y a bien qu'un seul user avec ce pseudo.. if(!empty($user) && count($user)==1){ $mdpBdd = $user[0]['password']; if (password_verify($mdp, $mdpBdd)){ return $user; }else{ return false; } }else{ return null; } } } ?>
NB: J'ai changé les fonctions getUserBypseudo et getUserByemail pour qu'elles retournent toutes les infos du user et pas seulement son id
Il me semble que c'est ce que je t'avais donné... et si tel est le cas, je ne vois pas pourquoi tu les avais modifié...
J'ai un peu modifié également la fonction d'authentification.
Et pour ton code, (bien entendu tu as chargé la class user )
et donc.. ça donne :
<?php // recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL; $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL; $userAuth = $oUser->authentification($pseudo,$mdp); if($userAuth){ $_SESSION['auth'] = $userAuth; $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté'; header('Location: boutique.php'); exit(); } elseif($userAuth === false ) { $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; }else{ $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; }
cc jordan merci bien... jai executé et on me met erreur: Undefined variable: oUser in C:\xampp\htdocs\Mb_Projet\mon blog\membres\connexion.php on line 17
Fatal error: Uncaught Error: Call to a member function authentification() on null a la ligne 8 du code ci dessus :
Fatal error: Uncaught Error: Call to a member function authentification() on null a la ligne 8 du code ci dessus :
$userAuth = $oUser->authentification($pseudo,$mdp);
ah mince ...ok excuse moi jordan javais oublier dinstancier la class ... je lai fait il nya plus derreur mais au lieu de me rediriger vers mon site il maffiche une page vierge jai pourtant bien le header location .. jai essayer avec et sans la session flash ca ne passe pas.
<?php //connexion à la bdd require_once 'connect_bd.php'; // on inclu la class user require_once "user.class.php"; //initialisation des variables $errors = array(); //on instancie la class user $oUser = new user($bdd); // recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL; $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL; $userAuth = $oUser->authentification($pseudo, $mdp); if($userAuth){ $_SESSION['auth'] = $userAuth; header('Location: boutique.php'); exit(); } elseif($userAuth === false ) { $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; } else{ $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; } ?>
Il te manque le démarrage des sessions non ?
Et as tu activé l'affichage des erreurs PHP ?
Après, peux tu faire des tests en plaçant (juste le temps des tests...) quelques echo dans le code (et en retirant une partie du code )
Par exemple
Si le echo s'affiche, tu peux ensuite tester
Et as tu activé l'affichage des erreurs PHP ?
Après, peux tu faire des tests en plaçant (juste le temps des tests...) quelques echo dans le code (et en retirant une partie du code )
Par exemple
<?php <?php session_start(); // si tu ne l'as pas déjà mis.. //connexion à la bdd require_once 'connect_bd.php'; // on inclu la class user require_once "user.class.php"; //initialisation des variables $errors = array(); //on instancie la class user $oUser = new user($bdd); // recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL; $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL; echo " On arrive bien là";
Si le echo s'affiche, tu peux ensuite tester
<?php session_start(); // si tu ne l'as pas déjà mis.. //connexion à la bdd require_once 'connect_bd.php'; // on inclu la class user require_once "user.class.php"; //initialisation des variables $errors = array(); //on instancie la class user $oUser = new user($bdd); // recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL; $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL; $userAuth = $oUser->authentification($pseudo, $mdp); print_r( $userAut);
Le champ "Password" dans ta bdd est bien écrit avec un "P" majuscule ?
Dans ce cas, modifie la class user :
Dans ce cas, modifie la class user :
public function authentification($pseudo,$mdp){ $user = $this->getUserByPseudo($pseudo); //verifie qu'il n'y a bien qu'un seul user avec ce pseudo.. if(!empty($user) && count($user)==1){ $mdpBdd = $user[0]['Password']; // Password au lieu de password if (password_verify($mdp, $mdpBdd)){ return $user; }else{ return false; } }else{ return null; } }
Donc...
Le code est bon.
Il faut juste lui dire quoi faire lorsque l'identifiant n'est pas bon...
par exemple...
Sinon.. normal que rien ne s'affiche.
Ensuite..
Ton user
n'est pas bon.. le Password n'est pas hashé ... Donc si c'est lui que tu utilises pour vérifier.. normal que ça ne marche pas.
Et enfin..
La structure de ta table n'est pas bonne non plus.
Le champ pour stocker le Password n'est pas assez grand.
Modifie la structure de ta table par :
Il te faudra supprimer puis recréer tes users si tu veux que les infos soient correctement enregistrées.
Par exemple, moi je me suis créer un user de test
Le code est bon.
Il faut juste lui dire quoi faire lorsque l'identifiant n'est pas bon...
par exemple...
header('Location: login.php');
Sinon.. normal que rien ne s'affiche.
if($userAuth){ $_SESSION['auth'] = $userAuth; header('Location: boutique.php'); exit(); } elseif($userAuth === false ) { $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; echo 'Identifiant ou mot de passe incorrecte'; header('Location: login.php'); exit(); } else{ $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; header('Location: login.php'); exit(); }
Ensuite..
Ton user
(4, 'Fatim', 'Fatima', 'marie pascale', 'Kouassi', '***@***', 0, ''),
n'est pas bon.. le Password n'est pas hashé ... Donc si c'est lui que tu utilises pour vérifier.. normal que ça ne marche pas.
Et enfin..
La structure de ta table n'est pas bonne non plus.
Le champ pour stocker le Password n'est pas assez grand.
Modifie la structure de ta table par :
CREATE TABLE IF NOT EXISTS `tblusers` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pseudo` varchar(20) CHARACTER SET utf8 NOT NULL, `Password` varchar(256) CHARACTER SET utf8 NOT NULL, `Firstname` text CHARACTER SET utf8 NOT NULL, `Lastname` text CHARACTER SET utf8 NOT NULL, `Email` varchar(60) CHARACTER SET utf8 NOT NULL, `contact` int(15) NOT NULL, `avatar` varchar(256) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`), KEY `pseudo` (`pseudo`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Il te faudra supprimer puis recréer tes users si tu veux que les infos soient correctement enregistrées.
Par exemple, moi je me suis créer un user de test
<?php require_once 'connect_bd.php'; // on inclu la class user require_once "user.class.php"; // on inclu la class user $oUser = new user($bdd); $oUser->addUser('jojo','azerty','jordane','re','jojo@test.fr',1,'moi.jpeg');
Ok je le fait mais .. la ligne Fatima la c'était un essaie sans cryptage du mot je l'avais fait avant dinserer le code du cryptage j'ai juste pas voulu supprimer.. sinon c'est avec les autre usées que je fais le test de connexion... Ok je change la structure de ma base et je reessai
Le null, si tu regardes le code de la fonction authentification .. correspond au fait qu'il ne trouve pas l'utilisateur...
Donc, soit tu écrits mal le pseudo de l'utilisateur ... soit tes variables ne sont pas bien envoyées par ton formulaire.
Fais donc un print_r($_POST); pour voir ce que contient ton submit ...
Donc, soit tu écrits mal le pseudo de l'utilisateur ... soit tes variables ne sont pas bien envoyées par ton formulaire.
Fais donc un print_r($_POST); pour voir ce que contient ton submit ...
jai fait une nvelle inscription et jai executer le print_r($_POST) kan je clik sur valider voila ce qui saffiche
Array ( [psdoconnect] => affia [passconnect] => aff [submit] => se connecter )
Array ( [psdoconnect] => affia [passconnect] => aff [submit] => se connecter )
<?php session_start(); //connexion à la bdd // penser à activer l'affichage des erreurs PDO : require_once 'connect_bd.php'; // on inclu la class user require_once "user.class.php"; // on inclu la class user //initialisation des variables $errors = array(); //on instancie la class user $oUser = new user($bdd); // recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL; $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL; print_r($_POST) $userAuth = $oUser->authentification($pseudo, $mdp); if($userAuth){ $_SESSION['auth'] = $userAuth; header('Location: boutique.php'); exit(); } elseif($userAuth === false ) { $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; echo 'Identifiant ou mot de passe incorrecte'; header('Location: login.php'); exit(); } else{ $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; header('Location: login.php'); exit(); } ?>
Et Donc... ?
Que se passe t'il ?
As tu, comme je te l'ai demandé à plusieurs reprises, activé l'affichage des erreurs php ?
Sachant que les redirections ne peuvent pas marcher si tu as déjà des choses d'afficher ( le print_r et le echo..).
On va y aller par étape :
Que donne ce code :
Que se passe t'il ?
As tu, comme je te l'ai demandé à plusieurs reprises, activé l'affichage des erreurs php ?
Sachant que les redirections ne peuvent pas marcher si tu as déjà des choses d'afficher ( le print_r et le echo..).
On va y aller par étape :
Que donne ce code :
<?php session_start(); //Affichage des erreurs php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); require_once 'connect_bd.php'; // on inclu la class user require_once "user.class.php"; // on inclu la class user //initialisation des variables $errors = array(); //on instancie la class user $oUser = new user($bdd); // recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : 'jojo'; $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : 'azerty'; $userAuth = $oUser->authentification($pseudo, $mdp); echo "<br>Pseudo:" . $pseudo ; echo "<br>Password :". $mdp ; echo "<pre>"; var_dump($userAuth); echo "</pre>"; if($userAuth){ $_SESSION['auth'] = $userAuth; echo '<br>Connexion OK'; //header('Location: boutique.php'); exit(); } elseif($userAuth === false ) { $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; echo '<br>Identifiant ou mot de passe incorrecte'; //header('Location: login.php'); exit(); } else{ $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte'; echo '<br>Identifiant ou mot de passe incorrecte'; //header('Location: login.php'); exit(); }
Et on est bien d'accord que tu as modifié la structure de ta table et que tu avais bien pris ma correction du fichier user.class.php ?
Je te le remet au cas où
Je te le remet au cas où
<?php class user { private $bdd = null; function __construct($bdd) { $this->bdd = $bdd; } public function dbExec($sql, $datas = NULL) { //Execution de la requete try { $requete = $this->bdd->prepare($sql); $requete->execute($datas); } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); } return $requete; } public function getUserBypseudo($pseudo) { $sql = 'SELECT * FROM tblusers WHERE pseudo = ?'; $datas = array($pseudo); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function getUserByemail($email) { $sql = 'SELECT * FROM tblusers WHERE Email = ?'; $datas = array($email); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function addUser($pseudo,$mdp,$prenom,$nom,$email,$contact=0,$photo=''){ //cryptage du mot de passe $mdp = password_hash($mdp, PASSWORD_BCRYPT); //insertion en BDD $sql = "INSERT INTO tblusers (pseudo, Password, Firstname, Lastname, Email, contact, avatar) values (?,?,?,?,?,?,?) "; $datas = array($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo); $res = $this->dbExec($sql,$datas); return $res; } /** * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password */ public function authentification($pseudo,$mdp){ $user = $this->getUserByPseudo($pseudo); //verifie qu'il n'y a bien qu'un seul user avec ce pseudo.. if(!empty($user) && count($user)==1){ $mdpBdd = $user[0]['Password']; if (password_verify($mdp, $mdpBdd)){ return $user; }else{ return false; } }else{ return null; } } } ?>
voici le code html de ma page de connexion
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <link href="logn.css" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Play" rel="stylesheet"> </head> <body> <div class="signin"> <form action="connexion.php" method="post"> <h2 style="color:#fff;">Se connecter</h2> <input type="text" name="psdoconnect" placeholder="pseudo" required><br><br> <input type="password" name="passconnect" placeholder="Password" required /><br /><br /> <input type="submit" value="se connecter" name="submit" /><br /><br /> <div id="container"> </form> </div> </body> </html>
il me redirige vers mon site maintenant comment je fais pour recuperer le nom de celui qui vient de se connecter et lafficher dans le menu de naviguation?
avec le header en commentaire voila ce quil maffiche:
Pseudo:affia
Password :aff
array(1) {
[0]=>
array(8) {
["id"]=>
string(1) "1"
["pseudo"]=>
string(5) "affia"
["Password"]=>
string(60) "$2y$10$3XwTVEsrVdRBpuGRgZmjEuSBdoGDnNXrriFZQsGy3X1g258oZ9Bg6"
["Firstname"]=>
string(5) "herve"
["Lastname"]=>
string(2) "Sy"
["Email"]=>
string(17) "***@***"
["contact"]=>
string(8) "56318852"
["avatar"]=>
string(17) "1547479743728.jpg"
}
}
Connexion OK
quand (//header('Location: boutique.php');) nest pas en commentaire il me redirige sur boutique.php
Pseudo:affia
Password :aff
array(1) {
[0]=>
array(8) {
["id"]=>
string(1) "1"
["pseudo"]=>
string(5) "affia"
["Password"]=>
string(60) "$2y$10$3XwTVEsrVdRBpuGRgZmjEuSBdoGDnNXrriFZQsGy3X1g258oZ9Bg6"
["Firstname"]=>
string(5) "herve"
["Lastname"]=>
string(2) "Sy"
["Email"]=>
string(17) "***@***"
["contact"]=>
string(8) "56318852"
["avatar"]=>
string(17) "1547479743728.jpg"
}
}
Connexion OK
quand (//header('Location: boutique.php');) nest pas en commentaire il me redirige sur boutique.php
Donc c'est bon.
Tu retires les echo/var_dump
tu réactives la redirection
et tout sera bon.
Et pour récupérer les infos de l'utilisateur connecté... il suffit de récupérer le contenu de la variable
mais là.. c'est une autre question.
Pense à mettre ce sujet en résolu et ouvre en un autre si tu as de nouveaux soucis.
Tu retires les echo/var_dump
tu réactives la redirection
et tout sera bon.
Et pour récupérer les infos de l'utilisateur connecté... il suffit de récupérer le contenu de la variable
$_SESSION['auth']
mais là.. c'est une autre question.
Pense à mettre ce sujet en résolu et ouvre en un autre si tu as de nouveaux soucis.