Bonsoir,
J'ai un problème que je trouve assez curieux.
J'ai créer un système de connexion.
Toute la connexion se passe bien.
Sur une page "privée" j'affiche le message suivant :
Bonjour + le pseudo de l'utilisateur.
Ce qui est particulier c'est que ce qui s'affiche n'est pas le bon pseudo.
Par exemple :
Pseudo : TEST ; Email : test@test.fr
Pseudo : Mika445 ; Email : mika445@test.fr
Et bien dans ce cas là c'est TEST qui s'affiche alors que je me connecte avec mika445@test.fr.
J'ai penser que ça pourrait venir du fait que les sessions ne sont pas détruite correctement.
Alors que le script fonctionne bien.
J'ai même essayer d'ouvrir le site sur une page en navigation privé histoire de tuer les sessions. Mais rien n'y fait.
Voici donc les codes :
Script de déconnexion :
<?php
session_start();
session_destroy();
header('location:index.php');
exit;
?>
Script de la page privé :
<?php
//PAGE PRIVÉ
session_start();
require 'cnx.php';
$email = $_SESSION['email_admin'];
$req = $cnx->query('SELECT * FROM users')->fetchAll();
foreach ($req as $data) {
if($data['email'] = $email){
$nickname = $data['nickname'];
}
}
?>
<?php if (empty($_SESSION))
{header('location:connect.php');//PAGE DE CONNEXION
}else{ ?>
Script de connexion :
<?php
session_start();
require 'cnx.php';
if(!empty($_POST)){
$email = $_POST['email'];
$password = sha1($_POST['password']);
$q = array('email' => $email, 'password' => $password);
$sql = "SELECT email, password FROM users WHERE email = :email AND password = :password";
$req = $cnx->prepare($sql);
$req->execute($q);
$connect = $req->fetch();
if($connect){
$_SESSION['email'] = $email;
$_SESSION['email_admin'] = $email;
$_SESSION['password'] = $password;
$_SESSION['connect'] = $connect;
header('location:admin.php'); //Redirection vers la page privée
}
}
?>
Merci d'avance pour votre aide :D
Il semblerait que tu aies oublié un "=" dans ta condition :
foreach ($req as $data) {
if($data['email'] == $email){ // avec la correction
$nickname = $data['nickname'];
}
}
Ici, la condition n'était pas bonne, il faut un == au lieu d'un = qui, lui, modifie $data['email'] puis rentre dans le if
Il y a de quoi péter un cable quand tu vois toutes les solutions que j'ai explorer.
Et que la cause du problème n'est qu'un =.