Problème vérification des logins

Résolu/Fermé
Jacksons Messages postés 18 Date d'inscription mardi 26 juillet 2011 Statut Membre Dernière intervention 22 janvier 2020 - 10 oct. 2013 à 22:39
Jacksons Messages postés 18 Date d'inscription mardi 26 juillet 2011 Statut Membre Dernière intervention 22 janvier 2020 - 10 oct. 2013 à 23:32
Bonjour,



J'ai un petit problème. Je veux vérifier la correspondance du login entré par l'utilisateur avec celui présent dans ma base de données PHPmyadmin.

Lorsque les pseudos et mots de passe correspondent, ça marche nickel.

Par contre lorsque ça correspond pas la condition ne marche pas, je ne comprend pas pourquoi. Voici le bout de code qui foire :


<?php

$reponse = $bdd->query("SELECT pseudo, mdp FROM membres WHERE pseudo = '".$_POST['pseudo']."' AND mdp = '" . md5($_POST['pass']) . "'");

while ($donnees = $reponse->fetch())
{
if($_POST['pseudo'] != $donnees["pseudo"] OR md5($_POST['pass'])!= $donnees["mdp"])
{
echo "Ce compte n'existe pas !";
}
else
{
echo "Connexion réussie !";
}
}



?>
Pourquoi mon if ne marche pas ?

Merci d'avance !

2 réponses

Jacksons Messages postés 18 Date d'inscription mardi 26 juillet 2011 Statut Membre Dernière intervention 22 janvier 2020 1
10 oct. 2013 à 23:32
Merci beaucoup pour ton aide, ta proposition marche à merveille.

Je suis plutôt débutant donc c'est vrai que j'en chie pas mal pour ce genre de truc.

Je ne connaissais pas rowcount ! Et effectivement retourner le nombre de ligne (1 donc) correspondant aux entrées du formulaire est exactement ce dont j'avais besoin.

Merci!
1
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
10 oct. 2013 à 23:21
Salut,

Quand la requête possède des paramètres en entrés, on utilise les requêtes préparés pour plus de sécurité.
Ton pseudo est supposé être un identifiant, donc unique, donc ta requête est supposé retourner au plus 1 résultat, donc pas besoin d'une boucle.
Tu n'as pas besoin de faire une seconde vérification de correspondance entre les pseudos, et les mot de passes, tu en as déjà fait une dans la requête, or, si la requête retourne un résultat, ça veut dire que le pseudo et le mot de passe correspondent.

<?php
$reponse = $bdd->prepare("SELECT pseudo FROM membres WHERE pseudo = :ps AND mdp = :md");
$reponse->bindParam(':ps', $_POST['pseudo'], PDO::PARAM_STR);
$reponse->bindParam(':md', md5($_POST['pass']), PDO::PARAM_STR);
$reponse->execute();

$nbrDeResultat = $reponse->rowCount();

if($nbrDeResultat == 0) {
echo "Ce compte n'existe pas !";
}
else {
echo "Connexion réussie !";
}
?>

0