PHP

Se connecte malgré les conditions en réactualisant

Résolu

Bonjour,


J'ai fait mon système de connexion, mais il s’avère que lorsque l'utilisateur rentre les bon identifiants mais que son statut est par example à 6 (compte suspendu) il affiche une erreur mais s'il actualise et renvoie les informations, il arrive à se connecter et a arrivé sur la page de profil !


<?php
session_start();

$img = "";
$folder = "";
$url = "connexion";

include_once('../config/ConnexionBDD.php');
include_once('../php/function.php');
include_once('../config/cookie_connexion.php');
include_once('../structure/user_nbr_live.php');

if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
  header("Location: profil.php?id=".$_SESSION['id']);
}

if(isset($_POST['formconnexion']))
{
  $mailconnect = $_POST['mailconnect'];
  $mdpconnect = $_POST['mdpconnect'];
  if(!empty($mailconnect) AND !empty($mdpconnect))
  {
    $reqmail = $bdd->prepare('SELECT mail FROM membres WHERE mail = ?');
    $reqmail->execute(array($mailconnect));
    $mailexist = $reqmail->rowCount();
    if($mailexist == 1)
    {
      $req = $bdd->prepare('SELECT * FROM membres WHERE mail = ?');
      $req->execute(array($mailconnect));
      $userinfo = $req->fetch();
      $mdpvalid = password_verify($mdpconnect, $userinfo['motdepasse']);
      if($mdpvalid)
      {
        if(isset($_POST['rememberme'])) {
          setcookie('email',$mailconnect,time()+365*24*3600,null,null,false,true);
          setcookie('password',$userinfo['motdepasse'],time()+365*24*3600,null,null,false,true);
        }
        if($userinfo['role'] == 6) {
          $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
          <strong>Erreur:</strong> Vous avez suspendu, pour plus d\'information, contacté <a href="">l\'assistance</a> !
          <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span></button>
          </div>';
        } else {
          if($userinfo['role'] == 7) {
            $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
            <strong>Erreur:</strong> Votre compte a été bloqué par un administrateur, pour plus d\'information, contacté <a href="">l\'assistance</a> !
            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span></button>
            </div>';
          } else {
            if($userinfo['role'] == 1) {
              $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
              <strong>Erreur:</strong> Votre email n\'a pas été confirmé !
              <button type="button" class="close" data-dismiss="alert" aria-label="Close">
              <span aria-hidden="true">&times;</span></button>
              </div>';
            } else {
              $_SESSION['id'] = $userinfo['id'];
              $_SESSION['pseudo'] = $userinfo['pseudo'];
              $_SESSION['mail'] = $userinfo['mail'];
              $_SESSION['role'] = $userinfo['role'];
              header("Location: profil.php?id=".$_SESSION['id']);
            }
          }
        }
      } else {
        $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
        <strong>Erreur:</strong> Email ou mot de passe incorrect !
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span></button>
        </div>';
      }
    } else {
      $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
      <strong>Erreur:</strong> Email ou mot de passe incorrect !
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
      <span aria-hidden="true">&times;</span></button>
      </div>';
    }
  } else {
    $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
    <strong>Erreur:</strong> Tous les champs doivent être complété !
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">&times;</span></button>
    </div>';
  }
}

require('view/connexion.view.php');
?>


Merci d'avance.

913 vues
21 mai 2020 à 20:14 (Édité)
Cette pub permet au site de vivre ...
Compte-supprimé
Le 24 Mai 2020 à 16:19 (Édité)

J'ai réussi en utilisant les exeptions !


Mon code :


try{

    if(empty($_POST['mailconnect']) OR empty($_POST['mdpconnect'])){
        throw new Exception(' Tous les champs doivent être complété !');
    }

    $mailconnect = $_POST['mailconnect'];
    $mdpconnect = $_POST['mdpconnect'];

    $req = $bdd->prepare('SELECT * FROM membres WHERE mail = ?');
    $req->execute(array($mailconnect));
    $userinfo = $req->fetch();

    if(empty($userinfo)){
        throw new Exception('Email ou mot de passe incorrect !');
    }

    if(!password_verify($mdpconnect, $userinfo['motdepasse'])){
        throw new Exception('Email ou mot de passe incorrect !');
    }

    switch ($userinfo['role'] ) {
        case 6:
                throw new Exception('Vous avez suspendu votre compte, pour plus d\'information <a href="../communication/contact.php">contacté l\'assistance</a> !');
            break;

            case 7:
                throw new Exception('Votre compte a été bloqué par un administrateur, pour plus d\'information <a href="../communication/contact.php">contacté l\'assistance</a> !');
            break;

            case 1:
                throw new Exception('Votre email n\'a pas été confirmé !');
            break;
    }

    $_SESSION['id'] = $userinfo['id'];
    $_SESSION['pseudo'] = $userinfo['pseudo'];
    $_SESSION['mail'] = $userinfo['mail'];
    $_SESSION['role'] = $userinfo['role'];
    header("Location: profil.php?id=".$_SESSION['id']);

}catch(Exception $e){
    $erreur = $e->getMessage();
    require('view/connexion.view.php');
}
Cette pub permet au site de vivre ...

9 commentaires

J'ai réussi en utilisant les exeptions !


Mon code :


try{

    if(empty($_POST['mailconnect']) OR empty($_POST['mdpconnect'])){
        throw new Exception(' Tous les champs doivent être complété !');
    }

    $mailconnect = $_POST['mailconnect'];
    $mdpconnect = $_POST['mdpconnect'];

    $req = $bdd->prepare('SELECT * FROM membres WHERE mail = ?');
    $req->execute(array($mailconnect));
    $userinfo = $req->fetch();

    if(empty($userinfo)){
        throw new Exception('Email ou mot de passe incorrect !');
    }

    if(!password_verify($mdpconnect, $userinfo['motdepasse'])){
        throw new Exception('Email ou mot de passe incorrect !');
    }

    switch ($userinfo['role'] ) {
        case 6:
                throw new Exception('Vous avez suspendu votre compte, pour plus d\'information <a href="../communication/contact.php">contacté l\'assistance</a> !');
            break;

            case 7:
                throw new Exception('Votre compte a été bloqué par un administrateur, pour plus d\'information <a href="../communication/contact.php">contacté l\'assistance</a> !');
            break;

            case 1:
                throw new Exception('Votre email n\'a pas été confirmé !');
            break;
    }

    $_SESSION['id'] = $userinfo['id'];
    $_SESSION['pseudo'] = $userinfo['pseudo'];
    $_SESSION['mail'] = $userinfo['mail'];
    $_SESSION['role'] = $userinfo['role'];
    header("Location: profil.php?id=".$_SESSION['id']);

}catch(Exception $e){
    $erreur = $e->getMessage();
    require('view/connexion.view.php');
}

Re:


As-tu réusssi à résoudre ton problème ou persiste-t-il toujours ? 🤔

Salut @Doppler après de plus ample recherche je me suis rendu compte qu'il restait une condition qui quand j'actualise me fait passer sur le profil au lieu de d’afficher de nouveau l'erreur ou rien, il s'agit de la condition si l’e-mail été confirmé qui beug !


Voici mon code:


if(isset($_POST['formconnexion']))
{
  $mailconnect = $_POST['mailconnect'];
  $mdpconnect = $_POST['mdpconnect'];
  if(!empty($mailconnect) AND !empty($mdpconnect))
  {
    $reqmail = $bdd->prepare('SELECT mail FROM membres WHERE mail = ?');
    $reqmail->execute(array($mailconnect));
    $mailexist = $reqmail->rowCount();
    if($mailexist == 1)
    {
      $req = $bdd->prepare('SELECT * FROM membres WHERE mail = ?');
      $req->execute(array($mailconnect));
      $userinfo = $req->fetch();
      $_SESSION['id'] = $userinfo['id'];
      $_SESSION['pseudo'] = $userinfo['pseudo'];
      $_SESSION['mail'] = $userinfo['mail'];
      $_SESSION['role'] = $userinfo['role'];
      $mdpvalid = password_verify($mdpconnect, $userinfo['motdepasse']);
      if($mdpvalid)
      {
        if(isset($_POST['rememberme'])) {
          setcookie('email',$mailconnect,time()+365*24*3600,null,null,false,true);
          setcookie('password',$userinfo['motdepasse'],time()+365*24*3600,null,null,false,true);
        }
        if($userinfo['role'] == 6) {
          $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
          <strong>Erreur:</strong> Vous avez suspendu votre compte, pour plus d\'information, contacté <a href="">l\'assistance</a> !
          <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span></button>
          </div>';
        } else {
          if($userinfo['role'] == 7) {
            $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
            <strong>Erreur:</strong> Votre compte a été bloqué par un administrateur, pour plus d\'information, contacté <a href="">l\'assistance</a> !
            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span></button>
            </div>';
          } else {
            if($userinfo['role'] == 1) {
              $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
              <strong>Erreur:</strong> Votre email n\'a pas été confirmé !
              <button type="button" class="close" data-dismiss="alert" aria-label="Close">
              <span aria-hidden="true">&times;</span></button>
              </div>';
            } else {
              header("Location: profil.php?id=".$_SESSION['id']);
            }
          }
        }
      } else {
        $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
        <strong>Erreur:</strong> Email ou mot de passe incorrect !
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span></button>
        </div>';
        if($userinfo['securiter'] == 2) {
          update_nbr_essai();
        } elseif ($userinfo['securiter'] == 3) {
          
        } else {
          
        }
      }
    } else {
      $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
      <strong>Erreur:</strong> Email ou mot de passe incorrect !
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
      <span aria-hidden="true">&times;</span></button>
      </div>';
    }
  } else {
    $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
    <strong>Erreur:</strong> Tous les champs doivent être complété !
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">&times;</span></button>
    </div>';
  }
}

Merci beaucoup @Doppler sa a marcher ;) !!

Salut @loloxz06,


Ton code est mal structuré...

Il faut que tu initialises test variables de session au niveau de la vérification du mot de passe :


if ($mdpvalid) {
    if (isset($_POST['rememberme'])) {
        setcookie('email', $mailconnect, time() + 365 * 24* 3600, null, null, false, true);
        setcookie('password', $userinfo['motdepasse'], time() + 365 * 24 * 3600, null, null, false, true);
    }

    if ($userinfo['role'] == 6) {
        $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
        <strong>Erreur:</strong> Vous avez été suspendu, pour plus d\'information, contactez <a href="">l\'assistance</a> !
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span></button>
        </div>';
    } elseif($userinfo['role'] == 7) {
        $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
        <strong>Erreur:</strong> Votre compte a été bloqué par un administrateur, pour plus d\'information, contactez <a href="">l\'assistance</a> !
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span></button>
        </div>';
    } elseif ($userinfo['role'] == 1) {
        $erreur = '<div style="width: 90%; margin: 0;" class="alert alert-danger alert-dismissible fade show" role="alert">
        <strong>Erreur:</strong> Votre email n\'a pas été confirmé !
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span></button>
        </div>';
    } else {
        $_SESSION['id'] = $userinfo['id'];
        $_SESSION['pseudo'] = $userinfo['pseudo'];
        $_SESSION['mail'] = $userinfo['mail'];
        $_SESSION['role'] = $userinfo['role'];


        header("Location: profil.php?id=".$_SESSION['id']);
    }
}


J'ai réorganisé également le code, afin de mieux situer les choses 😉


De plus, je te conseille vivement de créer une classe pour tes erreurs, au lieu d'insérer à chaque fois tes box d'erreurs 😉


Et là, normalement, cela devrait fonctionner 😉

Non mon système de bannissement est déja fait ce que je veux faire c'est empêcher que quand l’utilisateur bloquer se connecte et que l’erreur s'affiche, qu'il ne puisse pas en réactualisant la page se connecter en passant outre les conditions @Jerem971.

Re:


Si je comprends bien, c'est bien un système de banissement que tu souhaites mettre au point ? 🤔

Concernant les chemins de tes fichiers ont t'auraient conseillé d'utiliser des chemins absolus (voir cet article) 😉

Non @Jerem971, je code seul avec mon propre code, et je travaille sous xampp avec sublimetext.

Hello @loloxz06,


Est-ce que tu as suivis un tutoriel ou un article en particulier pour réaliser cela ? 🤔

Quel est ton environnement de développement ? 🤔

Cette pub permet au site de vivre ...