IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Connexion d'un membre


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut Connexion d'un membre
    Bonjour j'essaie de mettre en place en php pdo , la connexion d'un membre sur mon site mais j'ai erreur que j'essaie de résoudre depuis maintenant 2 jours :

    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\Projet\connexion2.php on line 90
    La ligne 90 est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $y->execute(array($_POST['mail']));

    Voila mon script PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    //Connexion à la base de donnée.
    $BDD_hote = 'localhost';
    $BDD_bd = 'projet';
    $BDD_utilisateur = 'root';
    $BDD_mot_passe = 'scandal';
    try{
    	$bdd = new PDO('mysql:host='.$BDD_hote.';dbname='.$BDD_bd, $BDD_utilisateur, $BDD_mot_passe);
    	$bdd->exec("SET CHARACTER SET utf8");
    	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    }
    catch(PDOException $e){
    	echo 'Erreur : '.$e->getMessage();
    	echo 'N° : '.$e->getCode();	
    }
    // Hachage du mot de passe
    $pass_hache = sha1($_POST['pwd0']);
    // Vérification des identifiants
    if(isset($_POST) && isset($_POST['mail']) AND isset($_POST['pwd0'])){
    	$y = $bdd->prepare("SELECT FROM * FROM client WHERE mail = :mail");
    	$y->execute(array($_POST['mail']));
    	$x = $y->fetch();
    	if ($x[0] == 0){
    		echo 'Cette adresse email n\'existe pas';
    	}else{
    		$e = $bdd->prepare("SELECT password FROM client WHERE password = password");
    		$e->execute(array($_POST['mail']));
    		$rep = $e->fetch();
    		$passe = sha1($_POST['pwd0']);
    		if ($passe == $rep['pwd0']){
    			$_SESSION['utilisateur'] = $_POST['mail'];
    			header('Location: compte.php'); 
    		}else{
    			echo 'Mot de passe incorrect';
    		}
    	}
    }
    ?>
    Quelqu'un pourrait m'aider s'il vous plait?

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Il suffit de lire le message en fait (bon, regarder les lignes concernées est un petit plus, l'astuce du pro quoi ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $e = $bdd->prepare("SELECT password FROM client WHERE password = password");
    $e->execute(array($_POST['mail']));
    Tu exécutes une requête préparée en lui assignant un paramètre, mais je ne vois pas trop où mettre le paramètre dans ta requête...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    J'ai modifié mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $e = $bdd->prepare('SELECT * FROM client WHERE password = :password');
    $e->execute(array($_POST['pwd0']));
    mais le problème reste toujours le même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $y->execute(array($_POST['mail']));

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Alors j'ai trouvé une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if(isset($_POST) && isset($_POST['mail']) AND isset($_POST['pwd0'])){
    	$y = $bdd->prepare('SELECT * FROM  client WHERE mail = :mail');
    	$y->execute(array(
    	'mail' => $_SESSION['mail']));
    	$x = $y->fetch();
    	if ($x[0] == 0){
    		echo 'Cette adresse email n\'existe pas';
    	}else{
    		$e = $bdd->prepare('SELECT * FROM client WHERE password = :password');
    		$e->execute(array(
    		'password' => $_SESSION['pwd0']));
    		$rep = $e->fetch();
    		$passe = ($_POST['pwd0']);
    		if ($passe == $rep['pwd0']){
    			$_SESSION['utilisateur'] = $_POST['mail'];
    			header('Location: compte.php'); 
    		}else{
    			echo 'Mot de passe incorrect';
    		}
    	}
    }

    Cependant j'ai du retiré le hachage du mot de passe pour que cela fonctionne, sinon avec le hachage du mot de passe il ne reconnait pas le mot de passe.

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    C'est sûr que si tu stockes les mots de passe en clair, ça risque pas d'aider de les comparer avec un hashage...

    Pour info, il ne faut jamais stocker des mots de passe en clair !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    J'ajoute qu'en plus d'être une faille béante pour tout pirate qui aurait accès à la bdd, c'est aussi une faute déontologique car personne (vraiment personne) ne doit être en mesure de pouvoir récupérer directement un mot de passe. En cas de piratage tu serais tenu pour responsable du vol des mots de passe et de ses conséquences...

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    J'ai stocké mes mots de passe hachés dans ma base de données me=ais maintenant je n'arrive pas à me connecter...

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Mais encore ?

    Qu'as-tu essayé ? Montres-nous le code utile.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    include_once 'config.php';
    if(isset($_POST) && isset($_POST['mail']) AND isset($_POST['passe'])){
    	$y = $bdd->prepare('SELECT COUNT(*) FROM client WHERE mail =?');
    	$y->execute(array($_POST['mail']));
    	$x = $y->fetch();
    	if ($x[0] == 0){
    		echo 'Cette adresse email n\'existe pas';
    	}
    	else{
    		$e = $bdd->prepare('SELECT password FROM client WHERE password = ?');
    		$e->execute(array($_POST['password']));
    		$passe = sha1($_POST['passe']);
    		$rep = $e->fetch();
    		if ($passe == $rep['password']){
    			session_start();
    			$_SESSION['utilisateur'] = $_POST['mail'];
    			header('Location: compte.php'); 
    		}
    		else{
    			echo 'Mot de passe incorrect';
    		}
    	}
    }
    ?>

    Les mots de passe ne correspondent pas lors de la comparaison... alors que j'ai utilisé le hachage..

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Normal il faut faire le test sur le password hasché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //...
                    $passe = sha1($_POST['passe']);
    		$e = $bdd->prepare('SELECT  COUNT(*) FROM client WHERE password = ?');
    		$e->execute(array($passe));
     
    		$rep = $e->fetchColumn();
    		if ($rep == 1)
                    {
    			session_start();
    			$_SESSION['utilisateur'] = $_POST['mail'];
    			header('Location: compte.php'); 
    		}
    		else{
    			echo 'Mot de passe incorrect';
    		}
    	}
    }
    ?>

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Merci beaucoup pour la solution proposé mais le mot de passe est toujours incorrect(bien sur je me suis assuré que c'était bien le bon mot de passe) , cependant j'ai remarqué que pour la ligne suivante si je remplace le 1 par 0 cela fonctionne et même sans entrer de mot de passe :o , alors je suis surement bête mais j'aimerais comprendre pourquoi...et le fetchColumn correspond à quoi..la colonne de mon mot de passe dans ma bdd est la 13...

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Bête je sais pas, mais assurément tu n'avanceras pas vite si tu ne te documente pas un peu plus Pour fetchColumn il y a un exemple ici (exemple n°2). C'est pratique pour ne récupérer qu'un résultat, dans ton cas le résultat du COUNT. C'est une alternative plus rapide que le fetch() suivi du if ($x[0] == 0) que tu faisais plus haut pour la requête du mail. Donc évidemment si la requête ne trouve pas de résultat cela retourne 0.

    Pour le reste vérifies (avec phpmyadmin) que dans ta bdd le mot de passe a bien la même valeur que echo sha1($_POST['passe']). Si oui c'est que tu as un pb au niveau de ta requête, fais afficher les erreurs.

    Ensuite il y a un pb logique dans ta façon de faire. Actuellement dans tes requêtes rien ne relie le mail et le pass. Un utilisateur ayant un mail authentifié pourrait éventuellement se servir d'un mot de passe d'un autre utilisateur.
    Pour éviter ça tu pourrais faire une seule requête sur les deux champs à la fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'SELECT  COUNT(*) FROM client WHERE mail = ? AND password = ?'
    Ou encore récupérer le pass en fonction du mail pour ensuite le comparer à sha1($_POST['passe'])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT password FROM client WHERE mail = ?'

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Merci de m'avoir répondu alors j'ai fais un echo de sha1($_POST['passe']) et j'ai la même valeur stocké dans ma bdd + d'autres chiffres (ex : 9cf95dacd226dcf43da376cdb6cbba7035218921 sachant que "9cf95dacd226" est le mot de passe .

    En ce qui concerne la relation entre le mail et le mot de passe je vais suivre ton conseil

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Et bien il y a un problème dans ta bdd. En admettant que le passe soit 'toto', dans le champ de la base donnée devrait se trouver la valeur de echo sha1('toto'); soit '0b9c2625dc21ef05f6ad4ddf47c5f203837aa32c' et rien d'autre.

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Alors oui effectivement j'ai refais ma base de données et maintenant le script fonctionne j'arrive à me connecter . Encore merci beaucoup pour l'aide apportée sur ce topic

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage de la dernière connexion d'un membre
    Par menoulette dans le forum Langage
    Réponses: 5
    Dernier message: 08/08/2009, 18h26
  2. Connexion à l'espace membre
    Par ploufleouf74 dans le forum Langage
    Réponses: 5
    Dernier message: 20/07/2009, 16h02
  3. [MySQL] connexion à un espace membre
    Par Arthezius dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/07/2008, 09h49
  4. Double demande de connexion d'un membre
    Par Flash38A dans le forum Langage
    Réponses: 4
    Dernier message: 30/10/2007, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo