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

ade -  
 ade -
 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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

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

    Bonjour,

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

    "WHERE eamil" ou "WHERE email" ?

    0
    1. ade
       

      email j'ai corrigé mais le probleme persiste.

      0
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

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

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

      excuse j'avais oublié , dois je mettre mon code a l'interieur de la balise try ????

      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > 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
      2. ade > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         

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

        0
      3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > 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
  4. ade
     

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

    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       

      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
      1. ade > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         

        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
      2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ade
     

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

      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
      1. ade > nono
         

        merci.

        0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       

      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