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

  • Votes
  • Date
  • Date décroissante
  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. Bonjour,

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

      "WHERE eamil" ou "WHERE email" ?

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

    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


      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();
        	}
      2. excuse j'avais oublié , dois je mettre mon code a l'interieur de la balise try ????

      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é.

      4. @jordane45

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

      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...

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

      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 ?

      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>
        	
      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

    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>
      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

      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...