Php connexion en sql que le 1er pseudo valide

canarder Messages postés 2034 Statut Membre -  
canarder Messages postés 2034 Statut Membre -
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. micropro7 Messages postés 46 Statut Membre
     
    je pense que tu devrais faire plus simplement:

    $reponse = $bdd->query('SELECT * FROM users whre user="'.$user.'" and pass="'.$pass.'"');
    0
  2. canarder Messages postés 2034 Statut Membre 357
     
    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";
    
    ?>
    0
  3. canarder Messages postés 2034 Statut Membre 357
     
    je ne demande pas un script tout fait mais quelle erreur j'ai faite !
    0
  4. micropro7 Messages postés 46 Statut Membre
     
    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