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