Problème connexion membre MySQL
Résolu
Evan
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je doit faire un système de connexion de membres, j'ai réussi à gérer l'inscription mais je n'arrive pas à gérer la connexion (il n'arrive pas à comparer le mdp de la base de données et le mdp entré dans le formulaire car sur la page web il m'affiche "Mauvais identifiant ou mdp" qui est le message d'erreur seulement quand le mdp ou l'identifiant est faux.
Voici le code :
(je pense que cela vient du "execute array" avec les 2 variables )
mais je sais pas comment faire
Merci beaucoup de votre aide ;) !
Je doit faire un système de connexion de membres, j'ai réussi à gérer l'inscription mais je n'arrive pas à gérer la connexion (il n'arrive pas à comparer le mdp de la base de données et le mdp entré dans le formulaire car sur la page web il m'affiche "Mauvais identifiant ou mdp" qui est le message d'erreur seulement quand le mdp ou l'identifiant est faux.
Voici le code :
(je pense que cela vient du "execute array" avec les 2 variables )
mais je sais pas comment faire
//connexion
if(isset($_POST['pseudo1']) && $_POST['pseudo1'] == !null)
{
$req = $bdd->prepare('SELECT pseudo, mdp FROM infos_persos WHERE pseudo = :pseudo');
$req->execute(array(
'pseudo' => $_POST['pseudo1']));
$resultat = $req->fetch();
// Comparaison du pass envoyé via le formulaire avec la base
$isPasswordCorrect = password_verify($_POST['password1'], $resultat['mdp']);
if (!$resultat)
{
echo 'Mauvais identifiant ou mot de passe !';
}
else
{
if ($isPasswordCorrect)
{
session_start();
$_SESSION['pseudo'] = $resultat['pseudo'];
$_SESSION['pseudob'] = $_POST['pseudo1'];
echo 'Vous êtes connecté !';
}
else
{
echo 'Mauvais identifiant ou mot de passe !';
}
}
}
Merci beaucoup de votre aide ;) !
Configuration: Windows / Chrome 73.0.3683.86
A voir également:
- Problème connexion membre MySQL
- Gmail connexion - Guide
- Membre indisponible vinted - Guide
- Connexion chromecast - Guide
- Gmail connexion autre compte - Guide
- D'où peut venir un problème de connexion internet sur un ordinateur ? - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peux-tu utiliser le type de code "php" quand tu partages du code php?
es-tu certain d'avoir bien enregistré le pseudo et le hash du mot de passe dans la base?
c'est une excellente idée, pour des raisons de sécurité, de renvoyer exactement le même message d'erreur pour un pseudo incorrect ou pour un mot de passe incorrect. cependant, cela complique un peu la recherche de l'erreur. peut-être veux-tu provisoirement renvoyer deux messages différents?
ce serait plus logique de faire ainsi, pour ne pas utiliser $resultat avant de vérifier qu'il était correct:
peux-tu utiliser le type de code "php" quand tu partages du code php?
es-tu certain d'avoir bien enregistré le pseudo et le hash du mot de passe dans la base?
c'est une excellente idée, pour des raisons de sécurité, de renvoyer exactement le même message d'erreur pour un pseudo incorrect ou pour un mot de passe incorrect. cependant, cela complique un peu la recherche de l'erreur. peut-être veux-tu provisoirement renvoyer deux messages différents?
ce serait plus logique de faire ainsi, pour ne pas utiliser $resultat avant de vérifier qu'il était correct:
$resultat = $req->fetch(); if (!$resultat) { echo 'Mauvais identifiant ou mot de passe !'; } else { // Comparaison du pass envoyé via le formulaire avec la base $isPasswordCorrect = password_verify($_POST['password1'], $resultat['mdp']); if ($isPasswordCorrect)
Bonjour
Attention, tu testes si $_POST['pseudo1'] est égal à !null, ce qui n'est certainement pas le cas.
Tu voulais sûrement tester une différence, ce qui s'écrit avec !== :
if(isset($_POST['pseudo1']) && $_POST['pseudo1'] == !null)
Attention, tu testes si $_POST['pseudo1'] est égal à !null, ce qui n'est certainement pas le cas.
Tu voulais sûrement tester une différence, ce qui s'écrit avec !== :
if(isset($_POST['pseudo1']) && $_POST['pseudo1'] !== null)
Bonjour,
Voici le code corrigé :
Comme tu peux le voir, j'ai appliqué le contenu de ces deux liens :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Je t'invite à en faire de même à l'avenir.
PS: ce code ne fonctionnera qu'à condition que tu aies bien enregistré le mot de passe de l'utilisateur via la fonction password_hash.
Voici le code corrigé :
<?php //démarrage Session session_start(); //affichage des erreurs php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //connexion à la bdd ET activation des erreurs PDO try{ $bdd =new PDO('mysql:host=localhost;dbname=mabdd; charset=utf8', 'user', 'password'); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } // Récupération PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['pseudo1']) ? trim($_POST['pseudo1']) : NULL; $password1 = !empty($_POST['password1']) ? trim($_POST['password1']) : NULL; //traitement .. if($pseudo){ //préparation de la requête et des variables $sql = "SELECT pseudo, mdp FROM infos_persos WHERE pseudo = :pseudo"; $datas = array(':pseudo'=>$pseudo); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; $resultat = $requete->fetch(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } if (!$resultat){ echo 'Pseudo inconnu !'; }else{ // Comparaison du pass envoyé via le formulaire avec la base $isPasswordCorrect = password_verify($password1, $resultat['mdp']); if ($isPasswordCorrect){ $_SESSION['pseudo'] = $resultat['pseudo']; $_SESSION['pseudob'] = $_POST['pseudo1']; echo 'Vous êtes connecté !'; }else{ echo 'Mauvais identifiant ou mot de passe !'; } } }else{ echo "Merci de renseigner un Pseudo !"; }
Comme tu peux le voir, j'ai appliqué le contenu de ces deux liens :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Je t'invite à en faire de même à l'avenir.
PS: ce code ne fonctionnera qu'à condition que tu aies bien enregistré le mot de passe de l'utilisateur via la fonction password_hash.
je n'avais pas prévu de faire deux messages d'erreur différents.
c'est un projet pour le bac donc pour le moment je ne hash pas le mot de passe.
j'ai inverser comme tu m'as dit :
Je pense avoir une erreur assez bête, car j'ai deux messages d'erreur "Mauvais identifiant ou mdp", j'ai rajouté un "1" et un "2" sur chaque message pour savoir lequel s'affiche.
ET quand je rentres le bon pseudo avec le bon mdp ou un mauvais mdp, j'ai le message d'erreur 2 qui s'affiche. Or quand je rentres un mauvais pseudo, j'ai le message d'erreur 1 qui s'affiche.
Je ne comprend pas.
Merci de votre aide
tes lignes 21 et 22 sont bizarres: tu enregistres deux fois quasi la même chose au même endroit.