Je n'arrive pas a me connecter avec ce code.

 if(isset ($_POST['seconecter'])){
		 if(!empty ($_POST['coemail']) AND !empty($_POST['comdp'])){
			 $mdp2 = sha1($_POST['comdp']);
			 $cosql= $bdd ->prepare('SELECT * FROM users WHERE eamil = ? AND mdp = ? ');
			 $cosql-> execute (array($_POST['coemail'], $mdp));
		 } if($cosql->rowcount()==1){
			 echo "connexion  reussis!!!!!!";
		 } else{
			 echo"vous devez renseigner tout les champs";
		 }
		
	 else{
			 echo"identifiant incorect";
		 }
	 	
	  
	 }

Bonjour,


Windows / Chrome 109.0.0.0

5 réponses

  1. Modérateur

    En gros, ça devrait donner un truc du genre

    
    //Récupération PROPRE des variables AVANT de les utiliser
    // utilisation de !empty et de l'écriture ternaire
    $login = !empty($_POST['coemail']) ? $_POST['coemail'] : NULL;
    $password = !empty($_POST['comdp']) ? $_POST['comdp'] : NULL;
    
    
    if(isset ($_POST['seconecter'])){
      
      
      
      if($login && $password){
        $mdp = sha1($password); // A remplacer par : https://www.php.net/manual/en/function.password-hash.php
        
        $sql= 'SELECT * FROM users WHERE email = ? AND mdp = ? ';
       
        $datas = array($login, $mdp);
    
        //Execution de la requete
        try{
          $requete = $bdd -> prepare($sql) ;
          $requete->execute($datas) ;
          //On stocke le résultat de la requête dans un array
          $result = $requete->fetchAll(); // Toutes les lignes .. à remplacer par fetch() si tu n'en veux qu'une
        }catch(Exception $e){
          // en cas d'erreur :
           echo " Erreur ! ".$e->getMessage();
           echo " Les datas : " ;
          print_r($datas);
        }
    
        if(count($result) == 1){
          echo "connexion  reussis!!!!!!";
        }else{
          echo "Aucun utilisateur trouvé ou ... trop d'utilisateurs avec les mêmes identifiants ?!";
        }
    
      } else {
        echo"vous devez renseigner tout les champs";
      }
    
    }
    
    
    

    et si tu utilises les vraies fonctions prévues à ça dans php

    
    //Version avec utilisation de password_verify
    // NB : Il faudra réencoder tes passwords avec la fonction https://www.php.net/manual/en/function.password-hash.php
    
    if(isset ($_POST['seconecter'])){
      
      
      
      if($login && $password){
       
        $sql= 'SELECT * FROM users WHERE email = ?';
        $datas = array($login);
    
        //Execution de la requete
        try{
          $requete = $bdd -> prepare($sql) ;
          $requete->execute($datas) ;
          //On stocke le premier résultat de la requête dans un array
          $result = $requete->fetch();
        }catch(Exception $e){
          // en cas d'erreur :
           echo " Erreur ! ".$e->getMessage();
           echo " Les datas : " ;
          print_r($datas);
        }
    
        if(!empty($result)){
          $hash = $result['mdp'] ?? null ;
          if (password_verify($password, $hash)) {
            echo "connexion  reussis!!!!!!";
          }else{
            echo "Mauvais password";
          }
        } else {
            echo "Aucun utilisateur correspondant..";
        }
      } else {
        echo"vous devez renseigner tout les champs";
      }
    
    }
    

    1
    1. Bonjour,

      $cosql= $bdd ->prepare('SELECT * FROM users WHERE eamil = ? AND mdp = ? ');

      "WHERE eamil" ou "WHERE email" ?

      0
      1. email j'ai corrigé mais le probleme persiste.

        0
    2. Modérateur

      bonjour 

      commence par appliquer ce qui est indiqué ici 

      https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

      nb: au passage, il ne faut plus utiliser le SHA1, SHA2 ou MD5 pour "crypter" les mots de passe...mais les fonctions PHP prévues pour gérer les mots de passe telles que password_verify et password_hash


      0
      1. c'est que je fais habituellement j'active l'affichage des erreurs PDO .

        	try{
        	$bdd = new PDO ("mysql:host=localhost;dbname=utilisateur;charset=utf8","root","");
        	$bdd ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        	echo"conection reussis";
        	}
        	catch(PDOException $e){
        		echo"erreur".$e->getMessage();
        	}
        0
      2. excuse j'avais oublié , dois je mettre mon code a l'interieur de la balise try ????

        0
      3. Modérateur
        @ade

        oui

        pas tout le code mais l'exécution de la requête tel que c'est montré dans le lien que je t'ai donné.

        0
      4. @jordane45

        et pour la question que j'ai posé en premier c'est quoi la solution????

        0
      5. Modérateur
        @ade

        de faire ce que je t'ai indiqué....  histoire qu'on puisse voir si il y a une erreur..

        sans ça,. faudra que je consulte ma boule de cristal...

        0
    3. je viens d'essayer rien ne se passe, il n'y a pas de message d'erreur.

      0
      1. Modérateur

        montre-nous ton code complet y compris la partie HTML. 

        n'oublie pas de nous indiquer le nom des fichiers si tu en as plusieurs. 

        ajoute également un var_dump dans le code PHP et regarde ce que ça donne lorsque tu essayes de te connecter. 

        ps: as-tu bien fait la mise à jour de ton code y compris pour l'utilisation des fonctions password hash et password verify ?

        quelle version de php utilise tu ?

        0
      2. @jordane45

        j'utilise la version 5.5.12 de php et mon code est sur une seul page.

        	<?php
        	  try{
        	$bdd = new PDO ("mysql:host=localhost;dbname=utilisateur;charset=utf8","root","");
        	$bdd ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        	echo"conection reussis";
        	
        	if (isset ($_POST['ok'])){
        		if(!empty ($_POST['prenom']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email'])){
        			
        		}else{
        			echo"vous devez remplir tout les champs";
        		}
        			
        			
        			if($_POST['mdp']== $_POST['mdp2']){
        				$mdp = passord_hash($_POST['mdp'], PASSWORD_DEFAULT);
        				$recup = $bdd->prepare('INSERT INTO users (prenom,mdp,email) VALUES (?,?,?)');
        				$recup->execute (array($_POST['prenom'] , $mdp , $_POST['email']));
        				if($recup->rowcount() == 1){
        					echo"nickel!";
        				}
        				
        			}else{
        				echo"les mot de passe ne sont pas identique";
        			
        		}
        	}
        	
        	
        	 if(isset ($_POST['seconecter'])){
        		 if(!empty ($_POST['coemail']) AND !empty($_POST['comdp'])){
        			$mdp = passord_hash($_POST['mdp'], PASSWORD_DEFAULT);
        			 $cosql= $bdd ->prepare('SELECT * FROM users WHERE email = ? AND mdp = ? ');
        			 $cosql-> execute (array($_POST['coemail'], $mdp));
        		 } if($cosql->rowcount()==1){
        			 echo "connexion  reussis!!!!!!";
        		 } 
        		
        	 else{
        			 echo"identifiant incorect";
        		 }
        		
        	 	
        	  
        	 }
        	}
        	
        	
        	catch(PDOException $e){
        		echo"erreur".$e->getMessage();
        	}
        	
        	
        	 ?>
        	<body>
        	<h1>inscription</h1>
        	<form method="POST" action="" align="center">
        	<label for="nom">votre prenom</label>
        	<input type="text" id="nom" name="prenom" placeholder="entrez votre prenom.." >
        	<br/><br/>
        	<label for="prenom">votre password</label>
        	<input type="password" id="prenom" name="mdp" placeholder="password" >
        	<br/><br/>
        	<label for="pseudo">seconde password</label>
        	<input type="password" name="mdp2" placeholder="pass"  >
        	<br/><br/>
        	<label for="email">votre email</label>
        	<input type="email" id="email" name="email" placeholder="entrez votre e-mail"  >
        	<br/><br/>
        	<input type="submit"  value="s'inscrir" name="ok">
        	</form>
        	<h1>connexion</h1>
        	<form>
        		<input type="email" name="coemail" placeholder="votre email">
        		<br/>
        		<input type="password" name="comdp" placeholder="votre password"><br/>
        		<input type="submit" name ="seconecter" value="se conecter">
        	</form>
        	
        0
      3. Modérateur
        @ade

        sachant que tu es en php 5, oublie les fonctions password_hash et reste avec du sha1.

        par contre, tu n'as visiblement utilisé aucun des codes que je t'ai donné...

        si tu regardes bien ton code, à mon avis, tu n'utilises pas les bonnes variables pour le mot de passe...

        au niveau de la connexion,un coup tu utilises comdp et après tu mets mdp

        0
    4. j'ai mis les bonne variable et toujours rien pas de connexion.

      <?php
      	  try{
      	$bdd = new PDO ("mysql:host=localhost;dbname=utilisateur;charset=utf8","root","");
      	$bdd ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
      	echo"conection reussis";
      	
      	if (isset ($_POST['ok'])){
      		if(!empty ($_POST['prenom']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email'])){
      			
      		}else{
      			echo"vous devez remplir tout les champs";
      		}
      			
      			
      			if($_POST['mdp']== $_POST['mdp2']){
      				$mdp = sha1($_POST['comdp']);
      				$recup = $bdd->prepare('INSERT INTO users (prenom,mdp,email) VALUES (?,?,?)');
      				$recup->execute (array($_POST['prenom'] , $mdp , $_POST['email']));
      				if($recup->rowcount() == 1){
      					echo"nickel!";
      				}
      				
      			}else{
      				echo"les mot de passe ne sont pas identique";
      			
      		}
      	}
      	
      	
      	 if(isset ($_POST['seconecter'])){
      		 if(!empty ($_POST['coemail']) AND !empty($_POST['comdp'])){
      			$mdp = sha1($_POST['comdp']);
      			 $cosql= $bdd ->prepare('SELECT * FROM users WHERE email = ? AND comdp = ? ');
      			 $cosql-> execute (array($_POST['coemail'], $mdp));
      		 } if($cosql->rowcount()==1){
      			 echo "connexion  reussis!!!!!!";
      		 } 
      		
      	 else{
      			 echo"identifiant incorect";
      		 }
      		
      	 	
      	  
      	 }
      	}
      	
      	
      	catch(PDOException $e){
      		echo"erreur".$e->getMessage();
      	}
      	
      	
      	 ?>
      	<body>
      	<h1>inscription</h1>
      	<form method="POST" action="" align="center">
      	<label for="nom">votre prenom</label>
      	<input type="text" id="nom" name="prenom" placeholder="entrez votre prenom.." >
      	<br/><br/>
      	<label for="prenom">votre password</label>
      	<input type="password" id="prenom" name="mdp" placeholder="password" >
      	<br/><br/>
      	<label for="pseudo">seconde password</label>
      	<input type="password" name="mdp2" placeholder="pass"  >
      	<br/><br/>
      	<label for="email">votre email</label>
      	<input type="email" id="email" name="email" placeholder="entrez votre e-mail"  >
      	<br/><br/>
      	<input type="submit"  value="s'inscrir" name="ok">
      	</form>
      	<h1>connexion</h1>
      	<form>
      		<input type="email" name="coemail" placeholder="votre email">
      		<br/>
      		<input type="password" name="comdp" placeholder="votre password"><br/>
      		<input type="submit" name ="seconecter" value="se conecter">
      	</form>
      0
      1. Voir cette page pour comprendre le problème et la solution proposée à l'exemple 2 : 

        https://www.php.net/manual/fr/pdostatement.rowcount.php

        1
      2. Modérateur

        Ce qui est dommage ... c'est que j'ai pris le temps de t'écrire du code... et tu ne l'as même pas utilisé...

        Forcément.. ça marche moins bien...

        0
      3. @nono

        merci.

        0