Actualiser des informations sans ce déco de la session
Résolu
anthopoki
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 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...
A voir également:
- Actualiser des informations sans ce déco de la session
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Entrer les informations d'identification reseau - Guide
- Teamviewer code de session expiré ✓ - Forum Logiciels
- Session invalide ou obsolète - Forum Consommation & Internet
- Vous n'avez pas fourni assez d'informations pour que google puisse s'assurer que ce compte vous appartient. google vous demande ces informations afin de protéger votre compte. - Guide
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
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...
htmlspecialchar ne s'utilise QUE pour de l'affichage. En aucun cas pour utiliser avec des requêtes SQL
Le SHA1 n'est plus sécurisé.
Si ta version de php est >5.6 tu dois désormais utiliser la fonction password_hash
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
Il n'est pas prudent de conserver le password dans un cookie (car facilement piratable)
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
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
$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