Formulaire de connexion securise php/mysqli
salut, Je suis Samgi, jaimerais que quelqu'un me vienne en aide s'il vous plait.
voici mon problem:
j'ai créé un formulaire d'inscription pour un site web et j'ai crypté le mot passe avec password_hash, ça fonctionne normalement parceque les donnees sont enregistré dans la base comme je voulais et le mot de passe est vraiment crypté. cependant, personne ne peut pas connecté a la base apres son inscription parce que je ne sais pas comment pouvoir recuperer le mot de passe crypter en php/mysqli par le biais de mon formulair de connenxion.
est-ce que quelqu'un puisse m'aider svp en me disant comment recuperer le champ mot de passe crypter?
voici mes codes;
code de traitement du formulaire d'inscription:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <?php
session_start();
$error='';
include 'database.php';
if(isset($_REQUEST['submit'])){
$user_firstname=$_REQUEST['fname'];
$user_lastname=$_REQUEST['lname'];
$user_username=$_REQUEST['username'];
$user_email=$_REQUEST['email'];
$user_password=$_REQUEST['password'];
$user_confpass=$_REQUEST['confpass'];
//On vérifie que password et password2 sont identiques
if($_POST["password"] == $_POST["confpass"]){
//On utilise alors notre fonction password_hash :
$hash = password_hash($user_password, PASSWORD_DEFAULT);
// encore plus secure
//$hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
$sql="INSERT INTO user(fname,lname,username,email,password,confpass) VALUES('$user_firstname','$user_lastname','$user_username','$user_email','$hash','$hash')";
mysqli_query($database,$sql) or die(mysqli_error($database));
$_SESSION['login_user'] = $user_username;
header('Location: membre.php?login_user='.$user_username);
} else {
$error = "Les deux mots de passe ne sont pas identiques.";
}
}
?> |
code de traitement du formulaire de connexion:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <?php
/*
Page: login.php
*/
session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
$error=''; // Variable To Store Error Message
if(isset($_POST['submit'])) { // si le bouton "Connexion" est appuyé
// on vérifie que le champ "username" 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['username'])) {
$error = "Le champ nom d'utilisateur est vide.";
} else {
// on vérifie maintenant si le champ "Mot de passe" n'est pas vide"
if(empty($_POST['password'])) {
$error = "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:
$username = htmlentities($_POST['username'], ENT_QUOTES, "utf-8"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL
$MotDePasse = htmlentities($_POST['password'], ENT_QUOTES, "utf-8");
//on se connecte à la base de données:
$mysqli = mysqli_connect("Serveur", "utilisateur", "motdepass", "ma base");
//on vérifie que la connexion s'effectue correctement:
if(!$mysqli){
$error = "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 user WHERE username = '".$username."' AND password = '".$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) {
$error = "Le nom d'utilisateur ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
} else {
// on ouvre la session avec $_SESSION:
$_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username
header("location: membre.php"); // Redirecting To Other Page
}
}
}
}
}
?> |
NB: je ne peux pas comparer le mot de passe entrer par l'utilisateur avec celui qui est chiffré dans la base. comment puis-je faire svp?
Comment Comparer le mot de passe rentrer par l'utilisateur avec celui de la base de données crypté.
je suis vraiment coincé, est-ce qu'on peut m'aider s'il vous plait? comment est-que je peux modifier ce code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <?php
/*
Page: login.php
*/
session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
$error=''; // Variable To Store Error Message
if(isset($_POST['submit'])) { // si le bouton "Connexion" est appuyé
// on vérifie que le champ "username" 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['username'])) {
$error = "Le champ nom d'utilisateur est vide.";
} else {
// on vérifie maintenant si le champ "Mot de passe" n'est pas vide"
if(empty($_POST['password'])) {
$error = "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:
$username = htmlentities($_POST['username'], ENT_QUOTES, "utf-8"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL
$MotDePasse = htmlentities($_POST['password'], ENT_QUOTES, "utf-8");
//on se connecte à la base de données:
$mysqli = mysqli_connect("Serveur", "utilisateur", "motdepass", "ma base");
//on vérifie que la connexion s'effectue correctement:
if(!$mysqli){
$error = "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 user WHERE username = '".$username."' AND password = '".$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) {
$error = "Le nom d'utilisateur ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
} else {
// on ouvre la session avec $_SESSION:
$_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username
header("location: membre.php"); // Redirecting To Other Page
}
}
}
}
}
?> |
pour pouvoir comparer le mot de passe rentrer par l'utilisateur avec celui de la base de données crypté avec ce code
Code:
$hash = password_hash($user_password, PASSWORD_DEFAULT);
dans le formulaire d'inscription. s'il vous plait donnez moi une idée de comparaison please.
j'ai beaucoup essayé je n'ai pas réussi à comparer celui de l'utilisateur et celui de la base. Merci d'avance.
NB: j'ai une idee de comparaison en PDO mais je ne peux pas le réaliser en MYSQLI, j'aimerais pouvoir le faire en PHP/MySQLI.
Comment Comparer le mot de passe rentré par l'utilisateur avec celui crypté de la base de données.
Salut,
merci beaucoup pour ta réponse, mais ça ne marche pas. on me réfère à cette fonction "password_verify" mais je ne sais pas comment l'utiliser.
vérification mot de passe utilisateur et celui crypté de la base de donnees en php/mysqli
j'ai essayé de comparer les deux mots de passes en utilisant la fonction "password_verify" mais ça ne fonctionne pas non plus.
//on vérifie que la connexion s'effectue correctement:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| if(!$mysqli){
$error = "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 user WHERE username = '".$username."' AND password = '".$user_password."'");
// 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
$hash = password_hash($user_password, PASSWORD_DEFAULT);
if(mysqli_num_rows($Requete) == 1) {
if (password_verify($user_password, $hash)) {
// on ouvre la session avec $_SESSION:
$_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username
header("location: membre.php"); // Redirecting To Other Page
}
} else {
$error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
}
} |
vérification mot de passe utilisateur et celui crypté de la base de donnees en php/mysqli
bonjours à tous, j'ai toujours le même problème mais j'ai essayé de modifier mon code comme suite:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?php
/*
Page: login.php
*/
session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
$error=''; // Variable To Store Error Message
if(isset($_POST['submit'])) { // si le bouton "Connexion" est appuyé
// on vérifie que le champ "username" 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['username'])) {
$error = "Le champ username est vide.";
} else {
// on vérifie maintenant si le champ "Mot de passe" n'est pas vide"
if(empty($_POST['password'])) {
$error = "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:
$username = htmlentities($_POST['username'], ENT_QUOTES, "utf-8"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL
$user_password = htmlentities($_POST['password'], ENT_QUOTES, "utf-8");
//on se connecte à la base de données:
$mysqli = mysqli_connect("localhost", "root", "", "");
//on vérifie que la connexion s'effectue correctement:
if(!$mysqli){
$error = "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 hash FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'");
// 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
$result = mysqli_fetch_row($Requete);
if (!$result) {
$error = "L'utilisateur est incorrect.";
} else {
$hash = $result[0];
if(password_verify($user_password, $hash)) {
//if (mysqli_num_rows($Requete) == 1) {
// on ouvre la session avec $_SESSION:
$_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username
header("location: membre.php"); // Redirecting To Other Page
}else {
$error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
}
}
}
}
}
}
?> |
et voici l'erreur que j'ai trouvé
Code:
Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in
sur cette ligne:
Code:
$result = mysqli_fetch_row($Requete);
pouriez vous me dire s'qui ce passe svp?
problème avec :mysqli_fetch_row() expects parameter 1 to be mysqli_result
Salut, merci pour ton idée, je suis tellement brouillé, j'arrive pas à l'adapter à mes besoins dans mon formulaire. je te donne le code du formulaire en question, pourrais tu m'aider stp? je t'en supplie.
voici mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?php
/*
Page: login.php
*/
session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
$error=''; // Variable To Store Error Message
if(isset($_POST['submit'])) { // si le bouton "Connexion" est appuyé
// on vérifie que le champ "username" 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['username'])) {
$error = "Le champ username est vide.";
} else {
// on vérifie maintenant si le champ "Mot de passe" n'est pas vide"
if(empty($_POST['password'])) {
$error = "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:
$username = htmlentities($_POST['username'], ENT_QUOTES, "utf-8"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL
$user_password = htmlentities($_POST['password'], ENT_QUOTES, "utf-8");
//on se connecte à la base de données:
$mysqli = mysqli_connect("localhost", "root", "mondieu", "inend");
//on vérifie que la connexion s'effectue correctement:
if(!$mysqli){
$error = "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 hash FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'");
// 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
$result = mysqli_fetch_row($Requete); //je quoi que le problème commence à partir de là
if (!$result) {
$error = "L'utilisateur est incorrect.";
} else {
$hash = $result[0];
if(password_verify($user_password, $hash)) {
//if (mysqli_num_rows($Requete) == 1) {
// on ouvre la session avec $_SESSION:
$_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username
header("location: membre.php"); // Redirecting To Other Page
}else {
$error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
}
}
}
}
}
}
?> |