Php connexion en sql que le 1er pseudo valide

Fermé
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 - 10 sept. 2010 à 21:01
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 - 11 sept. 2010 à 14:41
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


A voir également:

4 réponses

micropro7 Messages postés 39 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 17 avril 2014
10 sept. 2010 à 21:14
je pense que tu devrais faire plus simplement:

$reponse = $bdd->query('SELECT * FROM users whre user="'.$user.'" and pass="'.$pass.'"');
0
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
10 sept. 2010 à 21:25
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
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
11 sept. 2010 à 14:41
je ne demande pas un script tout fait mais quelle erreur j'ai faite !
0
micropro7 Messages postés 39 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 17 avril 2014
Modifié par micropro7 le 10/09/2010 à 22:12
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