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 pense que tu devrais faire plus simplement:

    $reponse = $bdd->query('SELECT * FROM users whre user="'.$user.'" and pass="'.$pass.'"');
    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. 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. je ne demande pas un script tout fait mais quelle erreur j'ai faite !