Problème connexion membre MySQL
Résolu/Fermé
A voir également:
- Problème connexion membre MySQL
- Gmail connexion - Guide
- Gmail connexion autre compte - Guide
- Hotmail connexion - Guide
- Membre indisponible vinted - Guide
- Facebook connexion - Guide
3 réponses
yg_be
Messages postés
23400
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2024
Ambassadeur
1 557
31 mars 2019 à 14:12
31 mars 2019 à 14:12
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)
Utilisateur anonyme
31 mars 2019 à 14:42
31 mars 2019 à 14:42
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)
vavan44360
Messages postés
2
Date d'inscription
dimanche 31 mars 2019
Statut
Membre
Dernière intervention
31 mars 2019
31 mars 2019 à 14:46
31 mars 2019 à 14:46
bonjour, le but est de tester si la case est vide.
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
31 mars 2019 à 15:32
31 mars 2019 à 15:32
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.
31 mars 2019 à 14:45
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
Modifié le 31 mars 2019 à 14:57
tes lignes 21 et 22 sont bizarres: tu enregistres deux fois quasi la même chose au même endroit.