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

andyajram 115 Messages postés vendredi 24 mai 2013Date d'inscription 14 mai 2018 Dernière intervention - 27 avril 2018 à 15:33 - Dernière réponse : jordane45 21113 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 mai 2018 Dernière intervention
- 27 avril 2018 à 21:06
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 

Votre réponse

15 réponses

jordane45 21113 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 mai 2018 Dernière intervention - Modifié par jordane45 le 27/04/2018 à 16:59
+1
Utile
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                                                                 
jordane45 21113 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 mai 2018 Dernière intervention - 27 avril 2018 à 16:58
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 115 Messages postés vendredi 24 mai 2013Date d'inscription 14 mai 2018 Dernière intervention - 27 avril 2018 à 17:01
ç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 21113 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 mai 2018 Dernière intervention - 27 avril 2018 à 17:08
Il est temp.
Il fait, par contre, crypter les password déjà presents dans ta bdd.
andyajram 115 Messages postés vendredi 24 mai 2013Date d'inscription 14 mai 2018 Dernière intervention - 27 avril 2018 à 17:08
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 21113 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 mai 2018 Dernière intervention - 27 avril 2018 à 21:06
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.