Connexion php/mysql aidez moi
ferraioli
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
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'apprend le php et mysql de 0 avec l'aide d'un DVD elephorm
et comme première exercice j'ai voulut réaliser une inscription,connéxion
Mon inscription marche niquel mais ma connexion a un petit problème...
Le script marche mais si j'écrit rien dans les input pseudo et mot de passe et que je clique sur le boutton connexion, cela me mene a la page de connexion réussit alors qu'elle devrais pas :/ je vous prie de m'aider !
mon script :
Cordialement.
et comme première exercice j'ai voulut réaliser une inscription,connéxion
Mon inscription marche niquel mais ma connexion a un petit problème...
Le script marche mais si j'écrit rien dans les input pseudo et mot de passe et que je clique sur le boutton connexion, cela me mene a la page de connexion réussit alors qu'elle devrais pas :/ je vous prie de m'aider !
mon script :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans nom</title> </head> <body> <form method="post" action="login.php"> Pseudo : <input type="text" name="pseudo"></br> Mot de passe : <input type="text" name="passe"></br></br> <input type="submit" name="botton" value="Connexion" /> <?php //------Connexion DB-------// session_start(); $connexion=mysql_connect( "localhost" , "root" , "" ); mysql_select_db("catalogue"); //------Condition quand tu click sur bouton envoyer-------// if(isset($_POST['botton'])) { //-----On vérifie si le pseudo et le mot de passe sont les même-----// $requete = "SELECT * FROM membre WHERE pseudo='".$_POST['pseudo']."' AND passe='".$_POST['passe']."'"; $resultat=mysql_query($requete); $donnee = mysql_fetch_array($resultat); //-----Condition Si le pseudo et le mote de passe sont les même alors header nous envoi a la page connexion-----// if($donnee['pseudo']==$_POST['pseudo'] AND $donnee['passe']==$_POST['passe']) { header('Location:connexion.php'); } //-----Sinon, envoi du message vos identifiant sont incorréct-----// else { echo"vos idéntifiant sont incorrect"; } } ?> </body> </html>
Cordialement.
A voir également:
- Connexion php/mysql aidez moi
- Gmail connexion - Guide
- Connexion chromecast - Guide
- Gmail connexion autre compte - Guide
- Site inaccessible n'autorise pas la connexion - Guide
- Mysql community server - Télécharger - Bases de données
2 réponses
Hello,
En fait tu t'y prends mal. Normalement tu ne récupères pas en base les lignes possédant un pseudo ET un mot de passe. Normalement ta requête devrait être celle-ci :
Et ensuite dans ton if tu dois vérifier que le passe est le même, et surtout que la base ne te renvoie pas un résultat vide, ce qui signifie que l'utilisateur n'existe pas.
Sachant que tu oublies certaines bonnes pratiques :
1/ Normalement tu devrais vérifier que les données POST ne sont pas vides avant même d'envoyer la requête en base. Cela t'évite de solliciter la base pour rien.
2/ Tes mots de passe de base devraient être cryptés en sha1 (en faisant simplement $pass = sha1($pass)). C'est plus sécuritaire si tu te fais pirater ta base.
3/ Il n'est pas recommandé d'insérer directement des données POST dans tes requêtes, car en mettant certaines choses on pourrait récupérer l'intégralité de ta base (injection SQL). Renseigne-toi sur les requêtes préparées.
Bon courage !
En fait tu t'y prends mal. Normalement tu ne récupères pas en base les lignes possédant un pseudo ET un mot de passe. Normalement ta requête devrait être celle-ci :
$requete = "SELECT passe FROM membre WHERE pseudo='".$_POST['pseudo']."'";
Et ensuite dans ton if tu dois vérifier que le passe est le même, et surtout que la base ne te renvoie pas un résultat vide, ce qui signifie que l'utilisateur n'existe pas.
if($donnee['passe'] != null && $donnee['passe'] == $_POST['passe']) { header('Location:connexion.php'); }
Sachant que tu oublies certaines bonnes pratiques :
1/ Normalement tu devrais vérifier que les données POST ne sont pas vides avant même d'envoyer la requête en base. Cela t'évite de solliciter la base pour rien.
2/ Tes mots de passe de base devraient être cryptés en sha1 (en faisant simplement $pass = sha1($pass)). C'est plus sécuritaire si tu te fais pirater ta base.
3/ Il n'est pas recommandé d'insérer directement des données POST dans tes requêtes, car en mettant certaines choses on pourrait récupérer l'intégralité de ta base (injection SQL). Renseigne-toi sur les requêtes préparées.
Bon courage !
Salut,
Très bon conseil de Mihawk !
D'abord un petit :
Ensuite je te conseil de faire un exists de ton speudo, avec une function du type :
Attention, ma fonction n'est pas tout à fait juste, à ne pas copier coller bêtement !
Donc si ta fonction te renvois true, tu check ensuite le mot de passe crypté. Sinon tu echo comment quoi l'utilisateur n'existe pas.
Pour finir, donc si ton mdp est bon, tu mets les infos du user en $_SESSION et tu header('Location:index.php') par exemple !
Très bon conseil de Mihawk !
D'abord un petit :
if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['passe'])
Ensuite je te conseil de faire un exists de ton speudo, avec une function du type :
function exists($login){ $this->_bd->prepare('SELECT count(*) FROM membre WHERE login = :l '); $this->_db->bindValue(':l', $login, PDO::PARAM_STR); $req = $this->_bd->execute(); return (bool)$req->fetch();
Attention, ma fonction n'est pas tout à fait juste, à ne pas copier coller bêtement !
Donc si ta fonction te renvois true, tu check ensuite le mot de passe crypté. Sinon tu echo comment quoi l'utilisateur n'existe pas.
Pour finir, donc si ton mdp est bon, tu mets les infos du user en $_SESSION et tu header('Location:index.php') par exemple !
Juste une petite question, n'est il pas préférable de faire faire la requête de cette manière :
afin de ne pas manipuler une chaine correspondant au bon mot de passe ?
(c'est pour pas culture perso ^^)
merci.
naga