Script de connexion qui n'autorise pas la connexion...

Fermé
Utilisateur anonyme - 27 août 2013 à 09:18
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 - 2 sept. 2013 à 12:25
Bonjour,

J'ai un léger souci avec un script de connexion.
<?php
				$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
				$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
				// Je crypte $passe avec la fonction "sha1".
				$passe = sha1($passe);
				$nbre = mysql_query("SELECT COUNT(*) AS exist FROM users_ok WHERE pseudo='$pseudo'");
				$donnees = mysql_fetch_array($nbre);
				if ($donnees['exist'] != 0)// Si le pseudo existe.
				{
					$quete = mysql_query("SELECT * FROM users_ok WHERE pseudo='$pseudo'");
					$infos = mysql_fetch_array($quete);
					if ($passe == $infos['passe']) {
						$_SESSION['pseudo'] = $pseudo;
            			echo "Success";  // C'est ici que je mets le code servant à effectuer la connexion, car le mot de passe est bon.
					} else // Si le couple pseudo/ mot de passe n'est pas bon.
					{
						echo 'Vous n\'avez pas rentré les bons identifiants';
					}
				}
				?>


Ce code est intégré à la page du formulaire et aucun moyen de me connecter ! Le code renvoie toujours "Vous n'avez pas rentré les bons identifiants".

A mon avis c'est pas grand chose mais pour ma part, je sèche... Une piste de réponse ?..

Merci
Romain
A voir également:

15 réponses

bibo5088 Messages postés 6 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 27 août 2013
27 août 2013 à 09:21
Peut-on voir la page du formulaire?
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
27 août 2013 à 09:22
Salut !

Essaye passe au lieu de * dans ton deuxieme select.
Sinon oui montre le formulaire
0
Yep salut,

<form name="login-form" class="login-form" action="index.php" method="post">
<!--HEADER-->
<div class="header">
<!--TITRE--><h1>Identification</h1><!--END TITLE-->
<!--DESCRIPTION--><span>Espace réservé</span></br></br><!--END DESCRIPTION-->
</div>
<!--FIN HEADER-->
<!--CONTENT-->
<div class="content">
<!--PSEUDO-->
<input name="pseudo" type="text" class="input username" placeholder="Nom d'utilisateur" onfocus="this.value=''" />
<!--FIN PSEUDO-->
<!--PASSE-->
<input name="passe" type="password" class="input password" placeholder="Mot de passe" onfocus="this.value=''" />
<!--FIN PASSE-->
</div>
<!--END CONTENT-->
<!--FOOTER-->
<div class="footer">
<!--LOGIN BUTTON-->
<input type="submit" value="Login" class="button" />
<!--FIN LOGIN BUTTON-->
</div>
<!--FIN FOOTER-->
</form>
<!--FIN LOGIN FORM-->


Et mon script php juste à la suite

@Jeremy.S : le remplacement de * par passe ne marche pas...
0
bibo5088 Messages postés 6 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 27 août 2013
27 août 2013 à 09:37
Quand tu teste, tu es sur d'avoir bien entrer le bon login et MDP?

Sinon, as-tu un compte dans ta Base de donnée?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
27 août 2013 à 09:40
Oui et j'ai même enregistré plusieurs identifiants différents mais pareil à chaque fois.
0
Utilisateur anonyme
27 août 2013 à 09:47
Dans ma table j'ai les champs "pseudo", "passe", "email" et d'autres champs vides pour le moment.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
27 août 2013 à 10:20
L'utilisateur dans ta BDD tu l'as ajouté comment ? Tu as bien fait attention à haché (sha1) le mot de passe quand tu as créé ton utilisateur ?

Sinon c'est pas une bonne idée de mettre ton code php comme ca direct à la suite, surtout que c'est ton index, c'est très déconseillé et pas "propre"

Donc essaye de mettre ton code php dans un autre fichier, login.php par exemple.
Avec un test tout au début : if(isset($_POST['pseudo']) $$ !empty($_POST['pseudo']) && isset($_POST['passe']) !empty($_POST['passe']))
Et tu met ton code dedans !
Et oublis pas redirigé une fois connecté, donc après avoir rempli la session ;-)
0
Utilisateur anonyme
27 août 2013 à 11:20
Je l'ai ajouté via un formulaire que j'ai créé aussi.

J'ai trouvé ce qui met le bazard.

Lorsque j'essai de m'identifier sans le cryptage et que j'ajoute un mot de passe non crypté dans ma table, ça marche ! Le problème vient donc du cryptage !

Pourtant j'ai bien mon encryptage en SHA-1 à l'inscription et à l'identification. Et le mot de passe est bien encrypté dans ma table.

Voilà mon script php de création d'utilisateur :

<?php
	if (!empty($_POST['pseudo'])) {
		$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
			$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
			$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
			// Cryptage du mot de passe.
			$passe = sha1($passe);

			$result=mysql_query("INSERT INTO users_ok (id, pseudo, passe, email) VALUES('', '$pseudo', '$passe', '$email')");
		} else {
			echo 'Les deux mots de passe que vous avez rentrés ne correspondent pas...';
		}

	if (!$result) {
		die('Requête invalide : ' . mysql_error());
	} else {
		echo "OKAAAAY !";
	}
	?>
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
27 août 2013 à 11:39
if (!empty($_POST['pseudo'])) ne suffit pas comme vérification, à compléter avec isset()

Essaye de mettre la fonction direct dans le INSERT INTO :
VALUES('', '$pseudo', 'sha1($passe)', '$email')

Bon par contre comme ca ca ne marchera pas.
Laisse de coté mysql_connect, et passe à pdo :
https://www.php.net/manual/fr/book.pdo.php
mysql_connect va être supprimé, et pdo est la nouvelle norme : regarde le constructeur, et les requete préparer (prepare avec bindValue et fetch)


0
Utilisateur anonyme
27 août 2013 à 12:52
Alors pour le "INSERT INTO" j'ai déjà essayé comme ça et j'ai eu l'erreur : Column count doesn't match value count at row 1. Donc j'ai fait comme on peut le voir dans mon code plus haut.

En ce qui concerne le PDO, je sais... Je m'y suis pas encore mit... Il faut dire que je suis pas encore au top en MySQL donc je vais attendre un peu...

Dans mon code, c'est comme si l'identification bloquait à cause du cryptage...
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
Modifié par jeremy.s le 27/08/2013 à 13:02
C'était pas la peine d'essayer c'était sur que ca n'allait pas marché ;-)

Justement profite en pour te mettre à PDO, ya des exemples très concret et tu comprends assez vite comment ca marche.
C'est surtout beaucoup plus sécurisé et "encadré" pour l'insertion de variable dans les requete.

Par exemple pour ton cas :
$bdd = new PDO(.......);
$insert = $bdd->prepare('INSERT INTO users_ok (id, pseudo, passe, email) VALUES("", :p, :m, :e)');
$insert->execute(array('p'=>$pseudo, 'm'=>sha1($passe), 'e'=>$email)) or die(print_r($insert->errorInfo()));


Jérémy
0
Utilisateur anonyme
27 août 2013 à 13:47
Je vais m'y mettre alors :-)

Mais avant j'aimerais bien trouver une solution à mon problème...
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
28 août 2013 à 08:16
Je pense que c'est le mysql_real_escape_string avec htmlspecialchars et sha1 ... mais c'est qu'une hypothèse !
0
Utilisateur anonyme
29 août 2013 à 15:50
Même pas...
0
Utilisateur anonyme
29 août 2013 à 15:56
Bon alors, je suis passé à PDO pour la page de connexion.

Et... Oh bah zut, ça marche pas ! Ça marche même moins bien !

Concernant le code, je n'ai même pas d'erreur, j'ai tout simplement une page blanche à l'affichage ! Sympa non ? :p

<?php
	

	$pseudo = $_POST['pseudo'];
	$passe = $_POST['passe'];

	if (!empty($pseudo) && !empty($passe)) {
		$req = $bdd -> prepare('SELECT * FROM users_ok WHERE pseudo = :pseudo AND passe = :passe');
		$req -> execute(array('pseudo' => $_POST['pseudo'], 'passe' => sha1($_POST['passe'])));
		$resultat = $bdd -> fetch();
		while ($resultat = $req->fetch())
{
    if ($resultat['pseudo'] == $pseudo AND $resultat['passe'] == $passe)
    {
    	echo 'OK';
        session_start();
        $_SESSION['pseudo'] = $pseudo;
    }
    else
    {   
        echo 'Vos identifiants sont incorrects';
    }
}
	?>


J'ai mis sur ON le "displays_error" dans la php.ini et mis un
var_dump(); die();
mais rien y fait....
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
30 août 2013 à 08:57
Ahah j'ai trouvé des petites erreurs ;-)
Alors niveau code, les trois premières lignes sont à évitées !
LA 1ère chose à faire dans un code php appelé par un formulaire c'est de vérifier les données. Donc ton if est à mettre tout au début :
if(isset($_POST['pseudo']) && !empty($_POST['speudo']) && isset($_POST['passe']) && !empty($_POST['passe']))


Ensuite tu peux stocké tes post dans des variables ;-)
Et attention, car $resultat['passe'] == $passe ne sera jamais vrai pcq le $resultat c'est le mdp crypté, et le $passe ne l'est pas ;-)

Après tu fais deux fetch, donc ton while ne va jamais s'executer enfaite, pcq logiquement tu n'as qu'un seul utilisateur donc le deuxieme fetch ne renvera rien.
==> D'ou ta page blanche !

Sinon l'utilisation de PDO est correct, une petite chose à rajouter pour avoir les erreurs de la base de données :
$req->execute(.....) or die(print_r($req->errorInfo()));
0
Utilisateur anonyme
31 août 2013 à 10:13
Salut,

Merci de ta réponse.
J'ai l'impression que l'encryptage en SHA1 m'est maudit...
Regarde plutot mon code modifié :
<?php
require ('config.php');
?>

<?php

	if(isset($_POST['pseudo']) && !empty($_POST['pseudo']) && isset($_POST['passe']) && !empty($_POST['passe' ]))

	{
	$pseudo = $_POST['pseudo'];
	$passe = $_POST['passe'];
	$encrypt_passe = sha1('passe');
	echo $_POST['pseudo'].'<br>'; 
	echo $_POST['passe'];
	$req = $bdd -> prepare('SELECT * FROM users_ok WHERE pseudo = :pseudo AND passe = :passe');
	$req -> execute(array('pseudo' => $_POST['pseudo'], 'passe' => $_POST['passe'])) or die(print_r($req->errorInfo())); 
	echo $_POST['passe'];
	while ($resultat = $bdd -> fetch());
	{
	if ($resultat['pseudo'] == $pseudo AND $resultat['passe'] == $passe)
    {
		session_start();
        $_SESSION['pseudo'] = $pseudo;
    	echo 'OK';
		
    }
    else
    {   
        echo 'Vos identifiants sont incorrects';
    }
}
	}	
?>


Les echo de mes mots de passe m'affichent tout simplement mon mot de passe en clair !
J'ai essayé directement $passe = sha1($_POST['passe']); mais pareil...
En revanche, j'ai toujours une belle page blanche malgré mon erreur (corrigée) avec les deux fetch()...
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
2 sept. 2013 à 12:25
Bon mtn c'est une erreur de logique :)

En algo, ton script doit ressemblé à ca :

<code>
Si les $_POST existent et ne sont pas vide, alors
On fait un "Select speudo, passe from users_ok where speudo = $_POST['speudo']
Si ya un résultat, alors
Si le passe == sha1($_POST['passe']), alors on met les infos en session
Sinon message d'erreur
Sinon message d'erreur
0