par
dooki » 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..
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]<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>[/code]
Connexion à la base et vérification ( .php)
[code]<?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
}
}
}
}
}
?>[/code]
Pourtant le champ "password" est bien le bon et il n'y a pas encore de include ducoup je ne comprends pas..