Page 1 sur 1

$_SESSION limité

Posté : 08 nov. 2020, 13:18
par Xotaz
Bonjour,

Depuis ce matin je comprend pas du tout, tout fonctionner bien mais maintenant le site prend en compte toutes les données de la colonne date sauf celui d'Admin (qui à une date supérieur à la date d'aujourd'hui). Les autres ID sont en date antérieur.


Dologin.php

Code : Tout sélectionner

<?php if(!empty($_POST['login'])){ session_start(); $login = $_POST['login']; $pwd = $_POST['pwd']; $query = "SELECT * FROM users WHERE login='$login' AND pwd='$pwd';"; $db = mysqli_connect('localhost','root','','parametre') or die("Connexion impossible " . mysqli_error()); $curseur = mysqli_query($db, $query) or die("exec impossible " . mysqli_error()); if(mysqli_num_rows($curseur) == 1){ $data = mysqli_fetch_object($curseur); if($data->active == 1){ $_SESSION['auth'] = $login; $_SESSION['active'] = $data->active; $_SESSION['role'] = $data->role; switch($data->role){ case 'admin': header("location:" . "admin/index_admin.php"); exit; break; case 'user': header("location:" . "index.php"); exit; break; } } else{ $msg = "Compte expirée"; header("location:" . "login.php?msg=$msg"); exit; } } else{ $msg = "Login ou Mot de passe Incorrect"; header("location:" . "login.php?msg=$msg"); exit; } } ?>


ALL_pages.php

Code : Tout sélectionner

<?php session_start(); if(!isset($_SESSION["auth"])){ header("Location: login.php"); exit(); } require('connect.php'); mysqli_select_db($con,"parametre"); $sql="SELECT abo FROM users"; $result = mysqli_query($con,$sql); while($row = mysqli_fetch_array($result)) { $date1 = date("Y-m-d"); $date2 = $row["abo"]; } if ($date2 <= $date1){ header("location:" . "abonnement.php"); } ?>


Je pense qui faudrait mettre un WHERE ou alors inclure la if() dans le dologin.php ?
Je suis perdu actuellement, merci à vous de bien vouloir m'aider.

Re: $_SESSION limité

Posté : 08 nov. 2020, 14:28
par or 1
$sql="SELECT abo FROM users";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)) {
$date1 = date("Y-m-d");
$date2 = $row["abo"];
}

cela tient compte, pour tous les utilisateurs, des dates du dernier utilisateur créé, et absolument pas de celles de l'utilisateur logué, donc le résultat ne peut pas être correct.
si les dates étaient dans la session, il n'y aurait pas à refaire une requête sql à chaque page.

Re: $_SESSION limité

Posté : 08 nov. 2020, 14:58
par Xotaz
$sql="SELECT abo FROM users";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)) {
$date1 = date("Y-m-d");
$date2 = $row["abo"];
}

cela tient compte, pour tous les utilisateurs, des dates du dernier utilisateur créé, et absolument pas de celles de l'utilisateur logué, donc le résultat ne peut pas être correct.
si les dates étaient dans la session, il n'y aurait pas à refaire une requête sql à chaque page.
Du coup, je rajoute $_SESSION['abo'] = $data->abo; dans la page Dologin.php ? et pour faire la comparaison des dates ? Je l'inclus dans le if active ?

Re: $_SESSION limité

Posté : 08 nov. 2020, 20:26
par Xotaz
Je pense ajouter l'abonnement aux $_SESSION mais je m'en sort pas du tout..



dologin.php

Code : Tout sélectionner

<?php if(!empty($_POST['login'])){ session_start(); $login = $_POST['login']; $pwd = $_POST['pwd']; $query = "SELECT * FROM users WHERE login='$login' AND pwd='$pwd';"; $db = mysqli_connect('localhost','root','','parametre') or die("Connexion impossible " . mysqli_error()); $curseur = mysqli_query($db, $query) or die("exec impossible " . mysqli_error()); if(mysqli_num_rows($curseur) == 1){ $data = mysqli_fetch_object($curseur); if( $data->active == 1 ){ $_SESSION['auth'] = $login; $_SESSION['active'] = $data->active; $_SESSION['role'] = $data->role; $_SESSION['abo'] = $data->abo; switch($data->role){ case 'admin': header("location:" . "admin/index_admin.php"); exit; break; case 'user': header("location:" . "index.php"); exit; break; } } else{ $msg = "Compte expirée"; header("location:" . "login.php?msg=$msg"); exit; } } else{ $msg = "Login ou Mot de passe Incorrect"; header("location:" . "login.php?msg=$msg"); exit; } } ?>

Je penser mettre deux conditions comme ceci:

Code : Tout sélectionner

if( $data->active == 1 && $data->abo >= date("Y-m-d") ){
Mais je vois pas comment rediriger vers la page d'abonnement en cas de date antérieur ou sinon laisser la connexion se faire.