Actualiser des informations sans ce déco de la session

Résolu/Fermé
anthopoki Messages postés 5 Date d'inscription jeudi 21 mai 2020 Statut Membre Dernière intervention 22 mai 2020 - 21 mai 2020 à 07:53
jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024 - 23 mai 2020 à 09:23
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

jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024 4 667
21 mai 2020 à 08:39
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
anthopoki Messages postés 5 Date d'inscription jeudi 21 mai 2020 Statut Membre Dernière intervention 22 mai 2020
Modifié le 21 mai 2020 à 08:59
Merci pour votre réponse rapide mais vous pourrez m'aider pour le code s'il vous plait ?
0
jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024 4 667
21 mai 2020 à 10:35
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
anthopoki Messages postés 5 Date d'inscription jeudi 21 mai 2020 Statut Membre Dernière intervention 22 mai 2020 > jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024
21 mai 2020 à 16:03
Je vois, tu coup tu souhaiterais quoi comme page pour voir mes lignes de code ?
0
jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024 4 667 > anthopoki Messages postés 5 Date d'inscription jeudi 21 mai 2020 Statut Membre Dernière intervention 22 mai 2020
Modifié le 21 mai 2020 à 18:13
A minima le fichier de connexion de tes users...(avec le code php qui te permet de te relier à la bdd )
0
anthopoki Messages postés 5 Date d'inscription jeudi 21 mai 2020 Statut Membre Dernière intervention 22 mai 2020 > jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024
22 mai 2020 à 05:14

// 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
jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024 4 667 > anthopoki Messages postés 5 Date d'inscription jeudi 21 mai 2020 Statut Membre Dernière intervention 22 mai 2020
22 mai 2020 à 09:17
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