Script de connexion qui n'autorise pas la connexion...
Utilisateur anonyme
-
jeremy.s Messages postés 1226 Date d'inscription Statut Membre Dernière intervention -
jeremy.s Messages postés 1226 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un léger souci avec un script de connexion.
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
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:
- Script de connexion qui n'autorise pas la connexion...
- Gmail connexion - Guide
- Site inaccessible n'autorise pas la connexion - Guide
- Connexion chromecast - Guide
- Gmail connexion autre compte - Guide
- Www.youtube.com n'autorise pas la connexion - Forum Discord
15 réponses
Yep salut,
Et mon script php juste à la suite
@Jeremy.S : le remplacement de * par passe ne marche pas...
<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...
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?
Sinon, as-tu un compte dans ta Base de donnée?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ;-)
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 ;-)
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 :
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 !"; } ?>
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)
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)
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...
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...
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 :
Jérémy
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
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
J'ai mis sur ON le "displays_error" dans la php.ini et mis un
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....
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 :
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()));
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()));
Salut,
Merci de ta réponse.
J'ai l'impression que l'encryptage en SHA1 m'est maudit...
Regarde plutot mon code modifié :
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()...
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()...
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
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