Après avoir repris un modèle de script de connexion, j'ai testé la connexion
Sauf que lorsque je saisi un bon login et un bon mot de passe, la page me dit qu'ils sont incorrects, alors qu'ils sont bien saisis dans ma BDD.
Merci de m'aider.
Code :
<?php
echo '<h2>Information pour le debug</h2>';
echo '<pre>';
echo "variable GET : "; print_r($_GET);
echo "variable POST : "; print_r($_POST);
echo "variable SESSION : "; print_r($_SESSION);
echo "variable FILES : "; print_r($_FILES);
echo '</pre>';
include 'connexion.php';
if(isset($_POST['login']) && isset($_POST['mot de passe']))
{
session_start();
$bdd = ouvrirBdd();
$req = "SELECT * FROM personne WHERE login = :login AND password = :password"; // login et mot de passe à saisir
$res = $bdd->prepare($req);
$login = htmlentities($_POST['login']);
$password = htmlentities($_POST['mot de passe']);
$res->execute(array('login'=>$login,'mot de passe'=>$password));
$nb_lignes = $res->rowCount();
// s'il y a au moins une ligne c'est que la personne existe en base de données
if ($nb_lignes >0)
{
session_start();
$_SESSION['id_personne'] = true;
header('Location: administration.php?');
}
else
{// login-pwd incorrect
// Ouverture du fichier en mode écriture seule
$monfichier = fopen('login.txt', 'a');
// On écrit dans le fichier le nouveau login pwd saisi
fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
fclose($monfichier);
// redirection vers la page login.php
header('Location: index.php?message=Identifiant ou mot de passe incorrect!'); // redirection + message d'erreur
}
}
else {
// Ouverture du fichier en mode écriture seule
$monfichier = fopen('login.txt', 'a');
// On écrit dans le fichier le nouveau login pwd saisi
fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
fclose($monfichier);
// redirection vers la page login.php
header('Location: index.php?message=Identifiant ou mot de passe incorrect!'); // redirection + message d'erreur
}
$bdd = NULL; // fermeture de la base de donnée
?>
Si tes mots de passe sont en clair dans ta bdd, il faudra sécuriser tout ça.
Si tu veux juste faire fonctionner le code, as tu activé les erreurs PDO (ou mysqli selon ce que tu utilises) ? As tu un résultat si tu testes directement dans ta base de données?
Je ne sais plus si htmlentities a quelque chose à faire dans ce cas là.
Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.
Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).
De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.
Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.
Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.
(titre originel : Formulaire de connexion)
Pas d'aide concernant le code par MP, le forum est là pour ça :)
J'arrive enfin a me connecter. Tu as bien bu Aurélien c'était les espaces du input qui faisait tout capoter.
Et donc les mots de passes sont bien bien en clair dans ma BDD, comment puis-je rectifier cela pour plus de sécurité ?
Je vous remercie !
<?php
echo '<h2>Information pour le debug</h2>';
echo '<pre>';
echo "variable GET : "; print_r($_GET);
echo "variable POST : "; print_r($_POST);
echo "variable SESSION : "; print_r($_SESSION);
echo "variable FILES : "; print_r($_FILES);
echo '</pre>';
include 'connexion.php';
if(isset($_POST['login']) && isset($_POST['mot_de_passe']))
{
session_start();
$bdd = ouvrirBdd();
$req = "SELECT * FROM personne WHERE login = ? AND mot_de_passe = ?"; // login et mot de passe à saisir
$res = $bdd->prepare($req);
$res->execute(array($_POST['login'], $_POST['mot_de_passe']));
$nb_lignes = $res->fetch();
// s'il y a au moins une ligne c'est que la personne existe en base de données
if ($nb_lignes >0)
{
session_start();
$_SESSION['id_personne'] = true;
header('Location: administrateur.php?');
}
else
{// login-pwd incorrect
// Ouverture du fichier en mode écriture seule
$monfichier = fopen('login.txt', 'a');
// On écrit dans le fichier le nouveau login pwd saisi
fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
fclose($monfichier);
// redirection vers la page login.php
header('Location: index.php?message=Identifiant ou mot de passe incorrect!'); // redirection + message d'erreur
}
}
else {
// Ouverture du fichier en mode écriture seule
$monfichier = fopen('login.txt', 'a');
// On écrit dans le fichier le nouveau login pwd saisi
fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
fclose($monfichier);
// redirection vers la page login.php
header('Location: index.php?message=Identifiant ou mot de passe incorrect!'); // redirection + message d'erreur
}
$bdd = NULL; // fermeture de la base de donnée
?>
Je viens d'utiliser password_hash, et je n'ai pas eu de problème particulier.
Est-ce que je dois changer ou rajouter quelque chose à mon code ?
<?php
echo '<h2>Information pour le debug</h2>';
echo '<pre>';
echo "variable GET : "; print_r($_GET);
echo "variable POST : "; print_r($_POST);
echo "variable SESSION : "; print_r($_SESSION);
echo "variable FILES : "; print_r($_FILES);
echo '</pre>';
include 'connexion.php';
if(isset($_POST['login']) && isset($_POST['mot_de_passe']))
{
session_start();
$bdd = ouvrirBdd();
$req = "SELECT * FROM personne WHERE login = ? AND mot_de_passe = ?"; // login et mot de passe à saisir
$res = $bdd->prepare($req);
$res->execute(array($_POST['login'], $_POST['mot_de_passe']));
$hashed_password = password_hash($_POST['mot_de_passe'], PASSWORD_DEFAULT);
$nb_lignes = $res->fetch();
// s'il y a au moins une ligne c'est que la personne existe en base de données
if ($nb_lignes >0)
{
if(password_verify($_POST['mot_de_passe'], $hashed_password))
{
$_SESSION['id_personne'] = true;
header('Location: administrateur.php?');
//var_dump($hashed_password);
}
}
else
{// login-pwd incorrect
// Ouverture du fichier en mode écriture seule
$monfichier = fopen('login.txt', 'a');
// On écrit dans le fichier le nouveau login pwd saisi
fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
fclose($monfichier);
// redirection vers la page login.php
header('Location: index.php?message=Identifiant ou mot de passe incorrect!'); // redirection + message d'erreur
}
}
else {
// Ouverture du fichier en mode écriture seule
$monfichier = fopen('login.txt', 'a');
// On écrit dans le fichier le nouveau login pwd saisi
fputs($monfichier, $_POST["login"] . " " . $_POST["pwd"] . "\n");
fclose($monfichier);
// redirection vers la page login.php
header('Location: index.php?message=Identifiant ou mot de passe incorrect!'); // redirection + message d'erreur
}
$bdd = NULL; // fermeture de la base de donnée
?>
Ton mot de passe est toujours en clair en base de données et tes password_hash/password_verify ne servent strictement à rien là. Le but c'est de faire le password_hash lors de l'INSERT pour insérer non pas le mot de passe mais son hash.
> if ($nb_lignes >0)
Tu n'as pas un nombre, ça devrait être if ($nb_lignes)
Mouais, logguer des mots de passe (même s'ils sont faux), ça ne se fait pas ! Et puis en else de if(isset($_POST['login']) && isset($_POST['mot_de_passe'])), tu loggues des NULL + l'erreur de $_POST["pwd"] vs $_POST['mot_de_passe']
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Pas d'aide concernant le code par MP, le forum est là pour ça :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP