Php connexion en sql que le 1er pseudo valide

Bonjour, j'ai un problème, j'ai créé un formulaire de connexion en sql, mais un problème survient : seul le premier utilisateur peut se connecter.

je pense que cela provient de la boucle while ...

Voici mon code :

<?php

if(!isset($_POST['user']))
{
echo "<form action='?' method='post'>\n
Pseudo :<br /><input type='text' name='user' /><br />\n
Mot de passe :<br /><input type='password' name='password' /><br />\n
<input type='submit' value='Connexion' />";
exit;
}

try
{
$bdd = new PDO('mysql:host=localhost;dbname=connection', 'root', '');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}

$reponse = $bdd->query('SELECT * FROM users');

while($donnees = $reponse->fetch())
{
	if(preg_match("#".$_POST['user']."#",$donnees['user']))
	{
	echo "Le pseudo ".$_POST['user']." est correct.<br />\n";
	}
	else
	{
	echo "Le pseudo ".$_POST['user']." est incorrect.<br />\n";
	exit;
	}

	$md5 = md5($_POST['password']);
	
	if(preg_match("#".$md5."#",$donnees['password']))
	{
	echo "Le mot de passe est correct.<br />\n";
	goto suite;
	}
	else
	{
	echo "Le mot de passe est incorrect.<br />\n";
	exit;
	}
}

suite:
	
$reponse->closeCursor();

echo "Vous êtes maintenant connecté.<br />\n";

?>


J'espère que vous avez compris :
- je me connecte avec mon pseudo et mon mot de passe,
- je vérifie en sql que le pseudo existe dans le champ user de la table users,
- je crypte le mot de passe en md5 et je vérifie que le mot de passe crypter existe dans le champ password de la table users qui a été inscrit en md5 dans la table.

le premier utilisateur peut se connecter correctement.
le deuxième non, son pseudo est trouvé incorrect.

à noter que "goto", si vous ne connaissez pas, a été créé depuis PHP 5.3.0.
voir https://www.php.net/manual/fr/control-structures.goto.php.

Merci pour vos réponses



--
๑۩۞۩๑ canarder ๑۩۞۩๑
Le Renard qui règne sur le WEB : Firefox

4 réponses

  1. je ne demande pas un script tout fait mais quelle erreur j'ai faite !
    1. bon je vais te donner un script de connexion qui marche;
      tu peut le tester ici avec login: mabene et mot de pass: mabene


      http://krak225.venez.fr/admin

      <?php

      session_start();

      function EstMembre($table,$loginField,$login,$passField,$pass)
      {

      $sql='SELECT * FROM '.$table.' WHERE '.$loginField.'="'.$login.'" AND '.$passField.'="'.$pass.'"';
      $req=mysql_query($sql);$n=mysql_num_rows($req);

      if($n==1){ return true; }else{ return false; }
      }

      function connexionDB(){
      mysql_connect('localhost','root','')or die (mysql_error());
      mysql_select_db('krakweb2') or die (mysql_error());
      }

      function kraksecurise($chaine){
      $chaine=mysql_real_escape_string(htmlspecialchars(trim($chaine)));
      return $chaine;
      }

      // le vérificateur

      connexionDB();

      $info="Accéder à l'administration";
      $login=null;$pass=null;

      if(isset($_POST['login']))
      {
      $login=kraksecurise($_POST['login']);
      $pass=kraksecurise($_POST['pass']);

      if(EstMembre('administrateurs','login',$login,'pass',$pass))
      {
      print '<a href="admin.php">Connexion réussie cliquer ici pour administrer</a>';

      }
      else
      {
      $info='<div class="echec">Login ou Password erronné</div>';
      }
      }

      if(isset($_SESSION['administrateur'])){
      header('location:admin.php');
      //redirection si connexion réussi
      }
      ?>

      //et le formulaire

      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>CPANEL::Administration</title>
      <meta name="keywords" content="micropro7, krak225, krak" />
      <meta name="description" content="le site web de micropro7" />
      <link href="css/accesForm.css" rel="stylesheet" type="text/css" media="screen" />
      </head>
      <body>
      <div id="AccesForm"><h1>krakAccesController</h1>
      <div class="info"><?php print $info; ?></div>
      <form method ="post" action ="">
      <fieldset>
      <label for="login">Login</label><input class="champ" type="text" name="login"/><br/>
      <label for="login">Password</label><input class="champ" type="password" name="pass"/><br/>
      </fieldset>
      <fieldset>
      <input type="submit" value="Acceder"/>
      </fieldset>
      </form>
      </div>

      </body>
      </html>
      1. j'ai un peu modifié mon code, et c'est toujours pareil :

        <?php
        
        if(!isset($_POST['user']))
        {
        echo "<form action='?' method='post'>\n
        Pseudo :<br /><input type='text' name='user' /><br />\n
        Mot de passe :<br /><input type='password' name='password' /><br />\n
        <input type='submit' value='Connexion' />";
        exit;
        }
        
        if($_POST['user']=='')
        {
        echo "Le pseudo est incorrect.<br />\n";
        exit;
        }
        
        if($_POST['password']=='')
        {
        echo "Le mot de passe est incorrect.<br />\n";
        exit;
        }
        
        try
        {
        $bdd = new PDO('mysql:host=localhost;dbname=connection', 'root', '');
        }
        catch (Exception $e)
        {
                die('Erreur : ' . $e->getMessage());
        }
        
        $reponse = $bdd->query('SELECT user FROM users');
        
        while($donnees = $reponse->fetch())
        {
            if(preg_match("#".$_POST['user']."#",$donnees['user']))
            {
            echo "Le pseudo ".htmlspecialchars($_POST['user'])." est correct.<br />\n";
            goto password;
            }
            else
            {
            echo "Le pseudo ".htmlspecialchars($_POST['user'])." est incorrect.<br />\n";
            exit;
            }
        }
        
        password:
        
        $reponse->closeCursor();
        
        $reponse = $bdd->query('SELECT password FROM users WHERE user=\''.$_POST['user'].'\'');
        
        while($donnees = $reponse->fetch())
        {
            $md5 = md5($_POST['password']);
            
            if(preg_match("#".$md5."#",$donnees['password']))
            {
            echo "Le mot de passe est correct.<br />\n";
            goto suite;
            }
            else
            {
            echo "Le mot de passe est incorrect.<br />\n";
            exit;
            }
        }
        
        suite:
            
        $reponse->closeCursor();
        
        echo "Vous êtes maintenant connecté.<br />\n";
        
        ?>
        1. je pense que tu devrais faire plus simplement:

          $reponse = $bdd->query('SELECT * FROM users whre user="'.$user.'" and pass="'.$pass.'"');