[RESOLU] $_SESSION limité

Avatar du membre
Eléphanteau du PHP | 13 Messages

08 nov. 2020, 13:18

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.

Mammouth du PHP | 2703 Messages

08 nov. 2020, 14:28

$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.

Avatar du membre
Eléphanteau du PHP | 13 Messages

08 nov. 2020, 14:58

$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 ?

Avatar du membre
Eléphanteau du PHP | 13 Messages

08 nov. 2020, 20:26

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.