Vérification de connexion ne marche pas [Résolu]

Messages postés
151
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
4 septembre 2019
-
Bonjour, je travail sur un formulaire de connexion , mais la vérification si le mot de passe ou login sont correctes ne marche pas , je n'ai aucune action ni si c'est correct ou faux , la page de connexion se charge toujours sur elle même :

<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password']))
{
    
    $db_username = 'root';
    $db_password = '';
    $db_name     = 'mapbdd';
    $db_host     = 'localhost';
    $db = mysqli_connect($db_host, $db_username, $db_password,$db_name)
           or die('could not connect to database');
    
  
    $username = mysqli_real_escape_string($db,htmlspecialchars($_POST['username'])); 
    $password = mysqli_real_escape_string($db,htmlspecialchars($_POST['password']));
    
    if($username !== "" && $password !== "")
    {
        $requete = "SELECT count(*) FROM login where 
              nom_utilisateur = '".$username."' and mot_de_passe = '".$password."' ";
        $exec_requete = mysqli_query($db,$requete);
        $reponse      = mysqli_fetch_array($exec_requete);
        $count = $reponse['count(*)'];
        if($count!=0) // nom d'utilisateur et mot de passe correctes
        {
           $_SESSION['username'] = $username;
           header('Location: principale.php');
        }
        else
        {
           header('Location: login.php?erreur=1'); // utilisateur ou mot de passe incorrect
        }
    }
    else
    {
       header('Location: login.php?erreur=2'); // utilisateur ou mot de passe vide
    }
}
else
{
   header('Location: login.php');
}
mysqli_close($db); // fermer la connexion
?>


c'est à dire qu'il ne fait pas le traitement , il passe directement au dernier else , quelqu'un peut me dire où y'a l'erreur ?

Merci d'avance
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316
1
Merci
Bonjour,

Essaye ça :
<?php
session_start();


//affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion propre mysqli
$db_username = 'root';
$db_password = '';
$db_name     = 'mapbdd';
$db_host     = 'localhost';
$db = mysqli_connect($db_host, $db_username, $db_password,$db_name)
// Check connection
if (mysqli_connect_errno()){
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}



//----------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//----------------------------------------------------------//

$username = !empty($_POST['username']) ? $_POST['username'] : NULL;
$password = !empty($_POST['password']) ? $_POST['password'] : NULL;

if($username && $password) {
     
  $username = mysqli_real_escape_string($db,$username); 
  $password = mysqli_real_escape_string($db,$password);
  
  $requete = "SELECT count(*) 
              FROM login 
              WHERE nom_utilisateur = '".$username."' 
              AND mot_de_passe = '".$password."' ";
              
  if (!$exec_requete = mysqli_query($db,$requete)){
    echo("Error requete : " . mysqli_error($db));
  }
  
  $reponse = mysqli_fetch_array($exec_requete);
  mysqli_close($db); // fermer la connexion
  
  $count = $reponse['count(*)'];
  if($count!=0){
      // nom d'utilisateur et mot de passe correctes
     $_SESSION['username'] = $username;
     header('Location: principale.php');
     exit(); //toujours mettre un EXIT après une redirection
  } else {
     header('Location: login.php?erreur=1'); // utilisateur ou mot de passe incorrect
     exit();
  }
} else {
  //le temps des tests :
   print_r($_POST);
   //header('Location: login.php?erreur=2'); // utilisateur ou mot de passe vide
   exit();
}
?>


Par contre... tu ne "crypte" pas ton password ??

normalement,
tu devrais crypter les password avant de les stocker en bdd
via l'instruction password_hash
http://www.lephpfacile.com/manuel-php/function.password-hash.php


Puis, pour les vérifier, utiliser le fonction password_verify
http://www.lephpfacile.com/manuel-php/function.password-verify.php

Cordialement, 
Jordane                                                                 

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

jordane45
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316 -
Et petite modification au niveau de te requête... l'ajout d'un ALIAS
$requete = "SELECT count(*) as NB
              FROM login 
              WHERE nom_utilisateur = '".$username."' 
              AND mot_de_passe = '".$password."' ";
              
  if (!$exec_requete = mysqli_query($db,$requete)){
    echo("Error requete : " . mysqli_error($db));
    exit(0); // au moins le temps des tests, on quitte en cas d'erreur
  }
  
  $reponse = mysqli_fetch_array($exec_requete);
  mysqli_close($db); // fermer la connexion
  
  $count = $reponse['NB'];
andyajram
Messages postés
151
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
4 septembre 2019
-
ça a marché maintenant merci beaucoup pour ton temps , juste une dernière question pour le cryptage de mot de passe , est-il encore le temps pour l'intégré dans mon code ou bien il faut tout refaire ?
jordane45
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316 -
Il est temp.
Il fait, par contre, crypter les password déjà presents dans ta bdd.
andyajram
Messages postés
151
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
4 septembre 2019
-
je ne sais pas comment le faire , je ne l'ai jamais fais même si j'ai lu des tuto je n'ai pas compris car je suis débutant
jordane45
Messages postés
26526
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
316 -
1 - tu fais une requête qui récupère les infos (dont le password existant ) de chaque user
2 - Tu boucles sur chaque ligne du résultat de la requête
3 - Pour chaque user :
A) Tu récupère le password
B) Tu le hash
$newPass = password_hash($oldPass, PASSWORD_DEFAULT);

C) Tu mets à jour le user avec le nouveau password ( requête UPDATE )
Commenter la réponse de jordane45