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 -
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...
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
-
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
-
Merci pour votre réponse rapide mais vous pourrez m'aider pour le code s'il vous plait ?
-
-
-
-
// 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(); } ?> ?> -
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
-