Actualiser des informations sans ce déco de la session

Résolu
anthopoki Messages postés 5 Statut Membre -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je cherche a savoir comment je pourrais faire pour actualiser une session automatiquement je m'explique.

Imaginons j'ai un code pour savoir si la personne est ban ou pas :

Dans la base de donnée la personne est a 0

0 = pas ban

Il se connecte tout va bien et une fois qu'il est connecté je change le chiffre en 1 depuis la base de donnée

1 = ban

Et bien je voudrais savoir comment je peux faire pour qu'une fois il actualise sa page le changement ce face automatiquement qu'il a pas besoin de ce déco-reco pour voir qu'il est ban.

Merci aux personnes qui m'aideront a résoudre mon problème...

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Et bien
    A l'ouverture de la page, tu fais un script qui va regarder en bdd la valeur de ban
    et qui agit en fonction...
    tu peux, par exemple :
    Si ban = 1 :
    - mettre à jour la variable de session correspondante
    - rediriger vers la page de login ou autre...

    Si ban = 0 :
    - mettre à jour la variable de session
    - poursuivre l'affichage de la page
    0
  2. anthopoki Messages postés 5 Statut Membre
     
    Merci pour votre réponse rapide mais vous pourrez m'aider pour le code s'il vous plait ?
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Ben...
      Sans rien savoir sur la structure de la table... La façon dont tu crées ta variable de session.. ton code de connexion à la bdd... Impossible de t'aider...
      0
    2. anthopoki Messages postés 5 Statut Membre > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Je vois, tu coup tu souhaiterais quoi comme page pour voir mes lignes de code ?
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > anthopoki Messages postés 5 Statut Membre
       
      A minima le fichier de connexion de tes users...(avec le code php qui te permet de te relier à la bdd )
      0
    4. anthopoki Messages postés 5 Statut Membre > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      
      // mon code dans ma page connexion 
      <?php
      
        session_start();
        include 'src/data.php';
        include 'src/cookie.php';
      
        if (isset($_SESSION['nomrp'])) {
          header('location: ../');
        }
      
        if (isset($_POST['submit'])) {
          
          $nomrp = htmlspecialchars($_POST['nomrp']);
          $password = sha1($_POST['password']);
      
          if ((!empty($nomrp)) && (!empty($password))) {
            
            $database = getPDO();
            $requestUser = $database->prepare("SELECT * FROM user WHERE nomrp = ? AND password = ?");
            $requestUser->execute(array($nomrp, $password));
            $userCount = $requestUser->rowCount();
            if ($userCount == 1) {
              
              if (isset($_POST['rememberme'])) {
                setcookie('nomrp',$nomrp,time()+365*24*3600,null,null,false,true);
                setcookie('password',$password,time()+365*24*3600,null,null,false,true);
              }
              $userInfo = $requestUser->fetch();
              $_SESSION['id'] = $userInfo['id'];
              $_SESSION['nomrp'] = $userInfo['nomrp'];
              $_SESSION['admin'] = $userInfo['isadmin'];
              $_SESSION['registerdate'] = $userInfo['registerdate'];
              $succesMessage = 'Vous êtes maintenant connecté !';
              header('refresh:1;url=...');
      
            } else {
              $errorMessage = 'Vos informations sont incorrect !';
            }
      
          } else {
            $errorMessage = 'Veuillez remplir tous les champs...';
          }
        }
      
      // Code pour relier ma bdd
      
      <?php
       
          /**
           * Connexion à la base de données.
           */
          function getPDO() {
              try {
                  $pdo = new PDO('mysql:dbname=....;host='...., '.......', '.......');
                  $pdo->exec("SET CHARACTER SET utf8");
                  return $pdo;
              } catch (PDOException $e) {
                  var_dump($e);
              }
          }
       
          function countDatabaseValue($connexionBDD, $key, $value) {
              $request = "SELECT * FROM user WHERE $key = ?";
              $rowCount = $connexionBDD->prepare($request);
              $rowCount->execute(array($value));
              return $rowCount->rowCount();
          }
      ?>
      
      ?>
      0
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > anthopoki Messages postés 5 Statut Membre
       
      Quelques remarques au passage...
        $nomrp = htmlspecialchars($_POST['nomrp']);
      

      htmlspecialchar ne s'utilise QUE pour de l'affichage. En aucun cas pour utiliser avec des requêtes SQL

          $password = sha1($_POST['password']);
      

      Le SHA1 n'est plus sécurisé.
      Si ta version de php est >5.6 tu dois désormais utiliser la fonction password_hash

      $userCount = $requestUser->rowCount();
      

      Comme indiqué dans la documentation de php .. rowCount ne s'utilise pas sur une requête SELECT.
      Ca ne doit servir que sur des requêtes INSERT ou UPDATE ou DELETE

      setcookie('password',$password,time()+365*24*3600,null,null,false,true);
      

      Il n'est pas prudent de conserver le password dans un cookie (car facilement piratable)


      $_SESSION['id'] = $userInfo['id'];
      $_SESSION['nomrp'] = $userInfo['nomrp'];
      $_SESSION['admin'] = $userInfo['isadmin'];
      $_SESSION['registerdate'] = $userInfo['registerdate'];
      

      Je ne vois pas de variable de session pour le BAN ...


      De plus, ton code semble très proche (voir identique...) à celui de
      https://forums.commentcamarche.net/forum/affich-36662910-donnes-dans-la-base-de-donnee-php

      Tu pourrais donc utiliser une CLASS pour gérer tes users inspirée du code du lien que je viens de te donner.

      Un truc du genre
      <?php
      // Fichier user.class.php
      
      class user{
        
        private $bdd;
        
        function __construct($bdd = null){
          if(!empty($bdd)){
            $this->bdd = $bdd;
          }else{
             $this->bdd = getPDO();
          }
        }
        
        
        
        public function getUserBynomrp($nomrp){
           $sql = "SELECT nomrp FROM user WHERE nomrp = ? ";
           $datas = array($nomrp);
           try{
              $prep = $this->bdd->prepare($sql);
              $prep->execute($datas);
              $res = $prep->fetchAll();
              return $res;
           }catch(Exception $e){
             echo "Erreur SQL : " . $e->getMessage();
           }
        }
        
        public function addUser($nomrp,$email,$mdp){
          $sql = "INSERT INTO user(nomrp, Email, password,avatar) VALUES(?,?,?,?)";
          
          /**
          // Si php > 5.6
             $mdp = password_hash($mdp);
          */
          //$mdp = sha1($mdp); // A changer par la ligne au dessus si version php compatible !
          $mdp = password_hash($mdp,PASSWORD_DEFAULT); 
          
          $datas = array($nomrp,$email,$mdp,"");
          try{
              $prep = $this->bdd->prepare($sql);
              $res = $prep->execute($datas);
              $newId = $this->bdd->lastInsertId(); // Retourne le numero auto-incrément de la table pour l'enregistrement créé
              return array('new_id'=>$newId);
           }catch(Exception $e){
             echo "Erreur SQL : " . $e->getMessage();
           }
        }
        
        /**
         * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password
         */
        public function authentification($nomrp,$mdp){
          $user = $this->getUserBynomrp($nomrp);
          //verifie qu'il n'y a bien qu'un seul user avec ce nomrp..
          if(!empty($user) && count($user)==1){
            $mdpBdd = $user[0]['password'];
            if (password_verify($mdp, $mdpBdd)){
              return $user;
            }else{
              return false;
            }
          }
        }
        
        /**
        * Permet de vérifier si un utilisateur est ban on pas 
        * return (bool) true ou false
        */
        public function isBan($nomrp){
          $sql = "SELECT ban FROM user WHERE nomrp = ? ";
           $datas = array($nomrp);
           try{
              $prep = $this->bdd->prepare($sql);
              $prep->execute($datas);
              $res = $prep->fetch();
              $isBan = !empty($res['ban']) ? $res['ban'] : false;
              return $isBan;
           }catch(Exception $e){
             echo "Erreur SQL : " . $e->getMessage();
           }
        }
        
        public function setBan($nomrp, $ban=0){
          $sql = "UPDATE user SET ban = ? WHERE nomrp = ? ";
           $datas = array($ban,$nomrp);
           try{
              $prep = $this->bdd->prepare($sql);
              $res  = $prep->execute($datas);
              return $res;
           }catch(Exception $e){
             echo "Erreur SQL : " . $e->getMessage();
           }
        }
        
        // Fin de la class user
      }
      


      Bien entendu, vu que tu es en PDO, il faut activer la gestion des erreurs dans la connexion à ta base
      Applique les consignes données ici :
      https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
      0