Formulaire de Connexion PDO [Résolu/Fermé]

Signaler
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
-
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
-
Bonjour,
Je souhaiterai mettre mon formulaire de connexion en requète préparé. Je m'en doutais j'ai une erreur "Warning" pouvez-vous me dire où il y a une erreur s'ils vous plait.
Sinon mon formulaire sans PDO fonctionne mais voilà je voudrais essayer de comprendre le fonctionnement. L'erreur se trouve sur la ligne execute.
Je vous remercie beaucoup de votre aide.
Cordialement

        //on sélectionne la table identifiant et on teste le champ login
        $resultats = $bdd->prepare('SELECT t_gestion_adherent.id_adherent, t_gestion_adherent.nom, t_gestion_adherent.prenom, t_gestion_adherent.adresse_mail, t_identifiant.rid_adherent, t_identifiant.categorie_statut, t_identifiant.niveau_statut, t_identifiant.categorie_admin, t_identifiant.login
				   FROM t_gestion_adherent
				   LEFT JOIN t_identifiant
				   ON t_gestion_adherent.id_adherent = t_identifiant.rid_adherent
				   WHERE login=:login AND pass=:pass');
	//on execute la requète
	$resultats->execute();
        // on récupére les données dans un tableau
	$donnees = $resultats->fetch(PDO::FETCH_ASSOC);



5 réponses


Bonjour

"Warning"
C'est tout ? Il n'y a rien d'autre ?
Donne toujours les messages d'erreur complets.

À vue de nez, je dirais que dans ton execute, il manque un array pour fournir les valeurs de :login et :pass :

$resultats->execute(array(':login'=>$login,':pass'=>$pass));


en mettant à la place de $login et $pass les bonnes variables (peut-être $_POST['login'] et $_POST['pass'] )
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
Bonjour
Merci de ta réponse, en mettant cette ligne
 
$resultats->execute(array(':login'=>$login,':pass'=>$pass));


maintenant ça me renvoie cette erreur

Notice: Undefined index: pass in

Merci de ton coup de main
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
l'erreur est à cette condition

        if ($donnees['pass'] != $pass) {
            echo "<span class='erreur'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</span>";
Bien sûr que $donnees['pass'] est indéfini.
D'où viendrait-il ?
$donnees, c'est une ligne de réponse à ta requête SELECT, mais dans ton SELECT tu ne demandes aucun 'pass'

D'ailleurs, je me demande ce que tu cherches à vérifier avec ton test, il y a déjà un "AND pass=:pass" dans le WHERE de ton SELECT, tu es sûr de n'avoir que des enregistrements avec le bon mot de passe.
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
C'est génial je te remercie de ton aide, j'ai rajouté le pass dans le select et la fameuse ligne execute et oupiiiiiiii ça marche.
Tu as été très réactif c'est super.
Je met mon code en entier à des fois pour quelqu'un qui veux vérifier un formulaire d'identification.
Merci

<?php
//on teste si le visiteur a soumis le formulaire
if (!empty($_POST)) {
	
    //on vérifie si le login et password ne sont pas vide, nulle ou non définie
    if (!empty($_POST['login']) && (!empty($_POST['pass']))) {
	
        //on récupère les valeurs des champs
        $login = trim($_POST['login']); //supprime les espaces en début et fin de chaine
        $login = htmlspecialchars($login, ENT_QUOTES); // supprime les caracteres speciaux html dans la chaine
	$login = stripslashes($login); // Supprime les antislashs d'une chaîne.       
        
	$pass = trim($_POST['pass']);
        $pass = htmlspecialchars($pass, ENT_QUOTES);
        $pass = stripslashes($pass);
	
	//cryptage sha1 du mot de pass
	//$pass = sha1($pass);
	
        //on sélectionne la table identifiant et on teste le champ login
        $resultats = $bdd->prepare('SELECT t_gestion_adherent.id_adherent, t_gestion_adherent.nom, t_gestion_adherent.prenom, t_gestion_adherent.adresse_mail, t_identifiant.rid_adherent, t_identifiant.categorie_statut, t_identifiant.niveau_statut, t_identifiant.categorie_admin, t_identifiant.login, t_identifiant.pass
				   FROM t_gestion_adherent
				   LEFT JOIN t_identifiant
				   ON t_gestion_adherent.id_adherent = t_identifiant.rid_adherent
				   WHERE login=:login AND pass=:pass');
	//on execute la requète
	$resultats->execute(array(':login'=>$login,':pass'=>$pass));
        // on récupére les données dans un tableau
	$donnees = $resultats->fetch(PDO::FETCH_ASSOC);
	
        //si le password est différent on met un message d'erreur
        if ($donnees['pass'] != $pass) {
            echo "<span class='erreur'>Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</span>";
        }
        //sinon c'est bon
        else {
            //on cré des variables accessibles depuis toutes les pages
			$_SESSION['id_adherent']	=	$donnees['id_adherent'];
			$_SESSION['nom']		=	$donnees['nom'];    
			$_SESSION['prenom']		=	$donnees['prenom'];           
			$_SESSION['adresse_mail']	=	$donnees['adresse_mail'];
			$_SESSION['categorie_statut']	=	$donnees['categorie_statut'];   
			$_SESSION['niveau_statut']	=	$donnees['niveau_statut'];
			$_SESSION['categorie_admin'] 	= 	$donnees['categorie_admin'];
			$_SESSION['login'] 		= 	$donnees['login'];

// Utiliser la redirection ---------------
redir("index.php?body=compte&type=compte");
            
        }
    } else {
        echo "<span class='erreur'>Veuillez remplir tous les champs !!!</span>";
    }
}
?>