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

andyajram
Messages postés
123
Date d'inscription
vendredi 24 mai 2013
Dernière intervention
12 octobre 2018
- 27 avril 2018 à 15:33 - Dernière réponse : jordane45
Messages postés
23235
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2018
- 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

Meilleure réponse
jordane45
Messages postés
23235
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2018
- Modifié par jordane45 le 27/04/2018 à 16:59
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                                                                 

Merci jordane45 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

jordane45
Messages postés
23235
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2018
- 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
Messages postés
123
Date d'inscription
vendredi 24 mai 2013
Dernière intervention
12 octobre 2018
- 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
Messages postés
23235
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2018
- 27 avril 2018 à 17:08
Il est temp.
Il fait, par contre, crypter les password déjà presents dans ta bdd.
andyajram
Messages postés
123
Date d'inscription
vendredi 24 mai 2013
Dernière intervention
12 octobre 2018
- 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
Messages postés
23235
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2018
- 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.