Page 1 sur 1
problème SESSION
Posté : 27 févr. 2013, 00:25
par xander
Voici mon problème, j'ai une session membre qui se crée lors du login d'un membre.
j'affiche un message d'erreur si les identifiant sont pas bon
sinon je connecte le membre.
mon problème est que quoi que je rentre sa me met mauvais identifiant.
or si je change ma condition dans mon if et je met la condition inverse sa me connecte qu'importe les identifiants erronées
voici mon code :
<?php
require("session.class.php");
$Session = new Session();
if(!empty($_POST))
{
$valid = true;
extract($_POST);
if($valid)
{
try{
$bdd = new PDO('mysql:host=localhost;dbname=oldschoolgen', 'root','') or die(print_r($bdd->errorInfo()));
$bdd->exec('SET NAMES utf8');
}
catch(Exeption $e){
die('Erreur:'.$e->getMessage());
}
$req = $bdd->prepare('SELECT * FROM membres WHERE email=:email AND password=:password');
$req->execute(array(
'email'=>$email,
'password'=>sha1($password)
));
$data = $req->fetch();
if (!$data)
{ $Session->setFlash('Mauvais identifiant veuillez réessayer','error');
// message d'alerte
}else{
// message d'alerte
$_SESSION['membre'] = $email;
$Session->setFlash('Identification réussie','success');
}
}
}
header('Location: index.php');
?>
Re: problème SESSION
Posté : 27 févr. 2013, 00:52
par moogli
salut,
est tu certain que la requête retourne quelque chose ?
ce que tu fait n'est pas une bonne idée et abuse du transtypage automatique
Cela ne sert a rien de faire un select si tu n'utilise pas les données.
par exemple
<?php
$req = $bdd->prepare('SELECT count(*) as nb FROM membres WHERE email=:email AND password=:password');
$result = $req->execute(array(
'email'=>$email,
'password'=>sha1($password)
));
if($result === false) {
// Erreur à traiter
}
else {
$data = $req->fetch(PDO::FETCH_ASSOC);
if($data['nb'] === '1') {
// ok
} else {
// KO
}
}
pour l'erreur voir
http://www.php.net/manual/fr/pdostatement.errorinfo.php
Pour info password est un mot clef SQL c'est une très mauvause idée de l'utilisé comme nom de champs (tu peux le mettre en français ça fonctionne bien

).
@+
Re: problème SESSION
Posté : 27 févr. 2013, 00:55
par yann18
le mot de passe de ta table membre est-il aussi crypté en sha1?
sinon le plus simple serait de passer aux paramètres de ta requête des valeurs en dur puis faire var_dump($req->fetch());
Re: problème SESSION
Posté : 27 févr. 2013, 01:12
par xander
oui le mdp dans ma bdd est en sha1 .
bien vue mooglie le mot clé j'y ai pas pensé lors du codage.
je vais testé un var dump pr test se que j'envois
Re: problème SESSION
Posté : 27 févr. 2013, 01:24
par xander
c'est bizarre moogli ta solution me renvoi des variables non définie comme erreur sur email et password
Re: problème SESSION
Posté : 27 févr. 2013, 03:13
par xander
idiot que je suis j'avais oublier mon extract($_POST);
j'ai effectué un var_dump et je récupère bien les valeur envoyé .
je suis en train de testé je pense que je suis proche de la résolution du problème
Re: problème SESSION
Posté : 27 févr. 2013, 03:19
par xander
j'ai essayé mais toujours le même souci j'ai que le message d'erreur quoi que je rentre =s
<?php
require("session.class.php");
$Session = new Session();
//connection au serveur
include ('includes/connexion_bdd.php');
$email = $_POST['email'] ;
$password = sha1($_POST['password']);
$req = $bdd->prepare('SELECT count(*) as nb FROM membres WHERE email=:email AND password=:password');
$result = $req->execute(array(
'email'=>$email,
'password'=>sha1($password)
));
if($result === false) {
$Session->setFlash('Mauvais identifiant veuillez réessayer','error');
}
else {
$data = $req->fetch(PDO::FETCH_ASSOC);
if($data['nb'] === '1') {
// message d'alerte
$_SESSION['membre'] = $email;
$Session->setFlash('Identification réussie','success');
} else {
$Session->setFlash('Mauvais identifiant veuillez réessayer','error');
}
}
header('Location: index.php');
?>
Re: problème SESSION
Posté : 27 févr. 2013, 09:30
par moogli
Donn nous le ddl de la table (create table) et un jeux de données pour test
@+
Re: problème SESSION
Posté : 27 févr. 2013, 12:48
par yann18
tu appliques 2 fois la fonction de cryptage sha1 sur $password ce qui implique le hashe obtenu au 1er chiffrage est encore chiffré.
j'ai essayé mais toujours le même souci j'ai que le message d'erreur quoi que je rentre =s
<?php
require("session.class.php");
$Session = new Session();
//connection au serveur
include ('includes/connexion_bdd.php');
$email = $_POST['email'] ;
$password = sha1($_POST['password']);//à ce niveau tu peux enlever sha1
$req = $bdd->prepare('SELECT count(*) as nb FROM membres WHERE email=:email AND password=:password');
$result = $req->execute(array(
'email'=>$email,
'password'=>sha1($password)
));
if($result === false) {
$Session->setFlash('Mauvais identifiant veuillez réessayer','error');
}
else {
$data = $req->fetch(PDO::FETCH_ASSOC);
if($data['nb'] === '1') {
// message d'alerte
$_SESSION['membre'] = $email;
$Session->setFlash('Identification réussie','success');
} else {
$Session->setFlash('Mauvais identifiant veuillez réessayer','error');
}
}
header('Location: index.php');
?>
Re: problème SESSION
Posté : 27 févr. 2013, 14:51
par xander
toujours le même souci sa me renvois que le message d'erreur =s
Re: problème SESSION
Posté : 27 févr. 2013, 15:36
par yann18
tu chiffres 2 fois le même mot de passe:
$password = sha1($_POST['password']);//!!!à ce niveau tu peux enlever sha1
et ici:
$result = $req->execute(array(
'email'=>$email,
'password'=>sha1($password) //!!!!
));
Par ailleurs c'est tjrs mieux de faire un var_dump sur le resultat de la requête.
tu peux poster la structure de la table membre