PHP

PHP connexion défaillainte

Non Résolu

Bonjour j'ai besoin d'aide alors tout d'abord je suivis vos tutos sur les connections en php cependant j'aire remarqué quand je mets n'importe quel mdp le formulaire me redirige comme même

Le code:

<?php
  session_start();
  include('../config/dbconnection.php'); // Fichier PHP contenant la connexion à votre BDD
 
 // S'il y a une session alors on ne retourne plus sur cette page  
  if (isset($_SESSION['id'])){
    header('Location:../index.php');
    exit;
  }
 
  // Si la variable "$_Post" contient des informations alors on les traitres
  if(!empty($_POST)){
    extract($_POST);
    $valid = true;
 
    if (isset($_POST['connexion'])){
      $mail = htmlentities(strtolower(trim($mail)));
      $mdp = trim($mdp);
 
      if(empty($mail)){ // Vérification qu'il y est bien un mail de renseigné
        $valid = false;
        $er_mail = "Il faut mettre un mail";
      }
 
      if(empty($mdp)){ // Vérification qu'il y est bien un mot de passe de renseigné
        $valid = false;
        $er_mdp = "Il faut mettre un mot de passe";
      }
 
      // On fait une requête pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
      $req = $DB->query("SELECT *
        FROM utilisateur
        WHERE mail = ? AND mdp = ?",
        array($mail, crypt($mdp, "$6$rounds=5000$shisd3983E3R9FHBCJHBCJ$")));
      $req = $req->fetch();
 
      // Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
      if ($req['id'] == ""){
        $valid = false;
        $mail = "Le mail ou le mot de passe est incorrecte";
        $mdp = "Le mail ou le mot de passe est incorrecte";
      }
 
      // Si le token n'est pas vide alors on ne l'autorise pas à accéder au site
      if($req['token'] <> NULL){
        $valid = false;
        $er_mail = "Le compte n'a pas été validé";  
      }
 
      // S'il y a un résultat alors on va charger la SESSION de l'utilisateur en utilisateur les variables $_SESSION
      if ($valid){
        $_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requêtes futures
        $_SESSION['nom'] = $req['nom'];
        $_SESSION['prenom'] = $req['prenom'];
        $_SESSION['mail'] = $req['mail'];
 
        header('Location: ../index.php');
        exit;
      } 
    }
  }
?>
438 vues
01 avril 2022 à 21:50 (Édité)
Cette pub permet au site de vivre ...

2 commentaires

ET aussi quand je mets prepare() ça me met cette erreur :Fatal error: Uncaught Error: Call to undefined method connexionDB::prepare() in C:\xampp\htdocs\Site\PHP\login.php:31 Stack trace: #0 {main} thrown in C:\xampp\htdocs\Site\PHP\login.php on line 31



La base de donnée:

<?php
  // Déclaration d'une nouvelle classe
  class connexionDB {
    private $host    = 'localhost';   // nom de l'host
    private $name    = 'login';     // nom de la base de donnée
    private $user    = 'root';        // utilisateur
    private $pass    = '';        // mot de passe
    private $connexion;
                    
    function __construct($host = null, $name = null, $user = null, $pass = null){
      if($host != null){
        $this->host = $host;           
        $this->name = $name;           
        $this->user = $user;          
        $this->pass = $pass;
      }
      try{
        $this->connexion = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name,
          $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8', 
          PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
      }catch (PDOException $e){
        echo 'Erreur : Impossible de se connecter  à la BDD !';
        die();
      }
    }
    
    public function query($sql, $data = array()){
      $req = $this->connexion->prepare($sql);
      $req->execute($data);
      return $req;
    }
    
    public function insert($sql, $data = array()){
      $req = $this->connexion->prepare($sql);
      $req->execute($data);
    }
  }
  
  // Faire une connexion à votre fonction
  $DB = new connexionDB();
?> 

Et le login.php:

<?php
  session_start();
  include('../config/dbconnection.php'); // Fichier PHP contenant la connexion à votre BDD
 
 // S'il y a une session alors on ne retourne plus sur cette page  
  if (isset($_SESSION['id'])){
    header('Location:../index.php');
    exit;
  }
 
  // Si la variable "$_Post" contient des informations alors on les traitres
  if(!empty($_POST)){
    extract($_POST);
    $valid = true;
 
    if (isset($_POST['connexion'])){
      $mail = htmlentities(strtolower(trim($mail)));
      $mdp = trim($mdp);
 
      if(empty($mail)){ // Vérification qu'il y est bien un mail de renseigné
        $valid = false;
        $er_mail = "Il faut mettre un mail";
      }
 
      if(empty($mdp)){ // Vérification qu'il y est bien un mot de passe de renseigné
        $valid = false;
        $er_mdp = "Il faut mettre un mot de passe";
      }
 
      // On fait une requête pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
      $req = $DB->prepare("SELECT *
        FROM utilisateur
        WHERE mail = ? AND mdp = ?");
      $req->execute(array($mail, password_verify($mdp, )));
      $req = $req->fetch();
 
      // Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
      if ($req['id'] == ""){
        $valid = false;
        $mail = "Le mail ou le mot de passe est incorrecte";
        $mdp = "Le mail ou le mot de passe est incorrecte";
      }
 
      // Si le token n'est pas vide alors on ne l'autorise pas à accéder au site
      if($req['token'] <> NULL){
        $valid = false;
        $er_mail = "Le compte n'a pas été validé";  
      }
 
      // S'il y a un résultat alors on va charger la SESSION de l'utilisateur en utilisateur les variables $_SESSION
      if ($valid){
        $_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requêtes futures
        $_SESSION['nom'] = $req['nom'];
        $_SESSION['prenom'] = $req['prenom'];
        $_SESSION['mail'] = $req['mail'];
 
        header('Location: ../index.php');
        exit;
      } 
    }
  }
?>

Et le register.php:

<?php 
session_start();
  include('../config/dbconnection.php');
   // Si la variable "$_Post" contient des informations alors on les traitres
  if(!empty($_POST)){
    extract($_POST);
    $valid = true;
 
    // On se place sur le bon formulaire grâce au "name" de la balise "input"
    if (isset($_POST['inscription'])){
      $nom = htmlentities(trim($nom)); // On récupère le nom
      $prenom = htmlentities(trim($prenom)); // on récupère le prénom
      $mail = htmlentities(strtolower(trim($mail))); // On récupère le mail
      $mdp = trim($mdp); // On récupère le mot de passe
      $confmdp = trim($confmdp); // On récupère la confirmation du mot de passe
 
      // Vérification du nom
      if(empty($nom)){
        $valid = false;
        $er_nom = ("Le nom d' utilisateur ne peut pas être vide");
      }   
 
      // Vérification du prénom
      if(empty($prenom)){
        $valid = false;
        $er_prenom = ("Le prenom d' utilisateur ne peut pas être vide");
      }   
 
      // Vérification du mail
      if(empty($mail)){
        $valid = false;
        $er_mail = "Le mail ne peut pas être vide";
 
        // On vérifit que le mail est dans le bon format
      }elseif(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)){
        $valid = false;
        $er_mail = "Le mail n'est pas valide";
 
      }else{
        // On vérifit que le mail est disponible
        $req_mail = $DB->query("SELECT mail FROM utilisateur WHERE mail = ?",
          array($mail));
 
        $req_mail = $req_mail->fetch();
 
        if ($req_mail['mail'] <> ""){
          $valid = false;
          $er_mail = "Ce mail existe déjà";
        }
      }
 
      // Vérification du mot de passe
      if(empty($mdp)) {
        $valid = false;
        $er_mdp = "Le mot de passe ne peut pas être vide";
 
      }elseif($mdp != $confmdp){
        $valid = false;
        $er_mdp = "La confirmation du mot de passe ne correspond pas";
      }
 
      // Si toutes les conditions sont remplies alors on fait le traitement
      if($valid){
 
        $mdp = password_hash($mdp,);
        $date_creation_compte = date('Y-m-d H:i:s');
 
        // On insert nos données dans la table utilisateur
        $DB->insert("INSERT INTO utilisateur (nom, prenom, mail, mdp, date_creation_compte) VALUES
          (?, ?, ?, ?, ?)",
          array($nom, $prenom, $mail, $mdp, $date_creation_compte));
 
        header('Location: ../index.php');
        exit;
      }
    }
  }
?>


Salut @Trylex ,



Premièrement change ça :


$req = $DB->query("SELECT *
    FROM utilisateur
    WHERE mail = ? AND mdp = ?",
    array($mail, crypt($mdp, "$6$rounds=5000$shisd3983E3R9FHBCJHBCJ$")));
$req = $req->fetch();


en ça :


$req = $DB->prepare("SELECT *
    FROM utilisateur
    WHERE mail = ? AND mdp = ?");
$req->execute(array($mail, crypt($mdp, "$6$rounds=5000$shisd3983E3R9FHBCJHBCJ$")));
$req = $req->fetch();


Ensuite pour voir ton erreur commente ces lignes ici temporairement :


header('Location: ../index.php');
exit;


Egalement pour crypter ton mot de passe je te conseille d'utiliser cette fonction password_hash($tonMotDePasse, PASSWORD_ARGON2ID) au lieu de crypt().


Pour la vérification lors de la connexion tu utiliseras la fonction password_verify($TonMotDePasseEnClair, PASSWORD_ARGON2ID)


Cette pub permet au site de vivre ...