[RESOLU] formulaire connexion

dooki
Invité n'ayant pas de compte PHPfrance

11 oct. 2019, 14:35

Bonjour, je m'entraine à coder en faisant un petit site en PHP (html et peut être js plus tard),

Malheuresement mon formulaire de connexion ne fonctionne pas comme il devrait :
Sans avoir même eut le temps de se connecter à la base de donnée, il répond "Le champ Mot de passe est vide." comme écrit dans le code ..

Mon formulaire ( .html )

Code : Tout sélectionner

<DOCTYPE HTML> <head></head> <body> <br><br><br><br><br><br> <br><br><br><br><br><br> <br> <CENTER> <FORM action="connexion.php" method="post"> <TABLE width=400 border=1 cellpadding=3> <tr> <td colspan=2><CENTER><FONT size="+2"><b>Connexion</b></FONT></CENTER> </td></tr> <tr> <td>Nom de Compte:</td><td> <input type="text" name="pseudo" id="pseudo" value="" > </td></tr> <tr> <td>Mot de passe:</td><td> <input type="password" name="password" id="password" value="" > </td></tr> <tr> <td colspan=2 align=center> <input type="submit" name="connexion" value='connexion!'> </td></tr> </TABLE> </FORM> <br> <a href="password_forgot.php">Oublie de mon mot de passe </a> <br> <a href="signup.php" class="text-center">Créer un compte </a> <br> <a href="index.html"><center><i class="fa fa-home"></i> Accueil </center></a> </CENTER> </body> </html>
Connexion à la base et vérification ( .php)

Code : Tout sélectionner

<?PHP /* Page: connexion.php */ session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION if(isset($_POST['connexion'])) { // si le bouton "Connexion" est appuyé // on vérifie que le champ "Pseudo" n'est pas vide // empty vérifie à la fois si le champ est vide et si le champ existe belle et bien (is set) if(empty($_POST['pseudo'])) { echo "Le champ Pseudo est vide."; } else { // on vérifie maintenant si le champ "Mot de passe" n'est pas vide" if(empty($_POST['password'])) { echo "Le champ Mot de passe est vide."; } else { // les champs sont bien posté et pas vide, on sécurise les données entrées par le membre: $Pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES, "ISO-8859-1"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL $MotDePasse = htmlentities($_POST['password'], ENT_QUOTES, "ISO-8859-1"); //on se connecte à la base de données: $mysqli = mysqli_connect("localhost", "root", "", "site2019"); //on vérifie que la connexion s'effectue correctement: if(!$mysqli){ echo "Erreur de connexion à la base de données."; } else { // on fait maintenant la requête dans la base de données pour rechercher si ces données existe et correspondent: $Requete = mysqli_query($mysqli,"SELECT * FROM users WHERE pseudo = '".$Pseudo."' AND password = '".$MotDePasse."'");//si vous avez enregistré le mot de passe en md5() il vous suffira de faire la vérification en mettant mdp = '".md5($MotDePasse)."' au lieu de mdp = '".$MotDePasse."' // si il y a un résultat, mysqli_num_rows() nous donnera alors 1 // si mysqli_num_rows() retourne 0 c'est qu'il a trouvé aucun résultat if(mysqli_num_rows($Requete) == 0) { echo "Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé."; } else { // on ouvre la session avec $_SESSION: $_SESSION['pseudo'] = $Pseudo; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le pseudo header("Location:localhost/index.html"); // Redirection du navigateur exit;//on affiche pas le reste de la page pour faire une redirection parfaite et sans erreurs } } } } } ?>
Pourtant le champ "password" est bien le bon et il n'y a pas encore de include ducoup je ne comprends pas..

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8311 Messages

11 oct. 2019, 14:39

Après ton session_start(), tu peux ajouter la ligne suivante pour voir toutes les données qui sont reçues en POST :
var_dump($_POST);
Tu peux aussi utiliser la console de ton navigateur web (Ctrl+Maj+i), onglet réseau/network pour voir ce qui est envoyé par ton navigateur comme données après validation de ton formulaire
Quand tout le reste a échoué, lisez le mode d'emploi...

dooki
Invité n'ayant pas de compte PHPfrance

11 oct. 2019, 14:57

Avec ta méthode il affiche :
array(3) { ["pseudo"]=> string(5) "admin" ["mdp"]=> string(5) "admin" ["connexion"]=> string(10) "connexion!" }
Si je comprends bien, la méthode POST récupère un tableau avec 3 choses à l'intérieur :
le pseudo qui fait 5 caractère, le mdp (euh j'avais pourtant mis password) qui fait 5 caractères et la connexion qui fait 10 caractères ?

dooki
Invité n'ayant pas de compte PHPfrance

11 oct. 2019, 16:13

Bon j'ai trouvé, il manqué le "!" devant le doctype de mon html ..

mais ducoup je reviens au problème que j'avais avant ->
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp1\htdocs\Site2019\connexion.php on line 30
Le pseudo ou le mot de passe est incorrect, le compte n'a pas été trouvé.
Il se connecte à la base de donnée mais n'arrive pas à trouver les informations dedans

dooki
Invité n'ayant pas de compte PHPfrance

11 oct. 2019, 16:19

Bon bah le fait d'en parler m'a ouvert les yeux !
Ma requête qui aller chercher le password s'appelle motdepasse dans ma db.
Merci pour ton aide !
(j'ai passé plusieurs heures sur le problème, ce forum a été ma révélation) !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8311 Messages

12 oct. 2019, 00:05

(j'ai passé plusieurs heures sur le problème, ce forum a été ma révélation) !
Alléluia ! :D
Quand tout le reste a échoué, lisez le mode d'emploi...