Bonjour, je découvre les sessions, et je m'en sort pas mal sauf que sa me connecte toujours même si je rentre de fausse données sa m'affiche le message de succès et sa me connecte =s alors que moi je veut que si les info rentré sont fausse je reste sur l'index et j'affiche le message d'erreur.
quelqu'un pourrais m'aidé plz =D

<?php
require("session.class.php");
$Session = new Session(); 
if(!empty($_POST))
{
  $valid = 1;
  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 (mysql_num_rows($req) > 0) 
  {
    $valid = 0;
    // message d'alerte
    $Session->setFlash('Mauvais identifiant veuillez réessayer','error');
  }else{
    // message d'alerte
    $_SESSION'membre'] = $email;
    $Session->setFlash('Identification réussie','success');

        }

    }

}
header('Location: index.php');
?>

19 réponses


Tiens cette partie du tutoriel vas t'aider:

http://youtu.be/7pgMl06HPms?t=41m

xander
Auteur

J'avais déjà regardé se tuto et j'avais pas trop compris son fonctionnement =s parce que je vois pas du tout ou je pourrais avoir une erreur

Tu as essayé d'exécuter directement ta requête?

$sql = 'SELECT * FROM membres WHERE email="'.$email.'" AND password="'.sha1($password).'"';
$req = $bdd->query($sql);
xander
Auteur

sa ne fonctionne pas non plus =s on m'a proposé sa aussi mais toujours le même problème

<?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');
?>
xander
Auteur

se code fonctionne chez mon pote et pas chez moi pareil pour mon problème d'update

C'est ta version de Wamp qui merdouille alors, pourquoi tu essayes pas de récupérer les fichiers de configuration Wamp de ton ami, que tu met sur ton PC?

xander
Auteur

J'ai pensé a sa hier donc j'ai supp et réinstallé wamp rien a faire donc je vais regardé le pc a mon pote

xander
Auteur

il a la même version de wamp que moi et il a touché aucun code et sa fonctionne aaaaaaaaaaa jpete un cable

xander
Auteur

Voici une solution qui pourrais peut etre me débloqué mais elle me débloque pas j'ai tj se foutue message d'erreur quoi que je mette .
j'ai meme testé avec un var_dump($_post); et je récupère bien les données que je test.

une solution ?? plz

<?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');
?>

Ce que tu peux tester, c'est voir les données que te retournes ta BDD, pour voir si ça ne viens pas de là, ça tombe dès que tu envois une donnée, elle trouve une réponse, même fausse, mais comme c'est une réponse, pour ton code ça veut dire qu'il y a au moins un utilisateur.

Je te conseille donc de faire un print_r de $_POST, de $data, et aussi de $_SESSION sur ta page, pour voir, vu que si le code est bon ça place des données dans $_SESSION, tu regardes quelles données sont mise dedans.

xander
Auteur

voici se que je récupère

<?php
require("session.class.php");
$Session = new Session();
//connection au serveur
include ('includes/connexion_bdd.php');
$email = $_POST'email'] ;
$password = $_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');
}
}
print_r($_POST);
print_r($_SESSION'membre']);
print_r($data);
?>

Array ( [email] => youssef.alakkad@gmail.com [password] => yyyyyy [x] => 20 [y] => 13 )
( ! ) Notice: Undefined index: membre in F:\wamp\www\osg_test\loginmembres.php on line 27
Call Stack

Time Memory Function Location

1 0.0008 685624 {main}( ) ..\loginmembres.php:0
Array ( [nb] => 0 )

Et c'est quoi la page loginmembres.php? C'est celle là? Et la ligne 27 est donc print_r($_SESSION'membre']); Au fait des petit <br> entre chaque print_r serais pas mal car on a du mal à voir qui a une erreur.

xander
Auteur

oui c'est bien la page loginmembres et la ligne 27 est bien le print_r de la session

Array ( [email] => youssef.alakkad@gmail.com [password] => yyyyyy [x] => 20 [y] => 13 ) == ligne 26

( ! ) Notice: Undefined index: membre in F:\wamp\www\osg_test\loginmembres.php on line 27
Call Stack

Time Memory Function Location

1 0.0008 685624 {main}( ) ..\loginmembres.php:0

Array ( [nb] => 0 ) == ligne 28

Donc il fonctionne bien, vu qu'il te retourne aucun $data, donc ne créé pas la variable $_SESSION'membre'].

Tu peux limite faire un if(isset($_SESSION'membre'])) en mettant la page vers laquel tu veux rediriger les connectés et un else vers la page de connexion avec les erreurs

xander
Auteur

wow je m’attendais pas a une réponse a cette heure ci mortel j'étais justement en train de travaillé dessus je vais voir sa

xander
Auteur

sa fonctionne pas et je suis sur que c'est a cause de la variable session membre depuis que je me suis mis a travaillé sur le code il est la source de mon problème

Recommence ton code à zéro, après j'ai essayé ça et ça marche correctement:

<?php 
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
$email = $_POST'email'] ;
$password = $_POST'password'];
$sql = "SELECT * FROM `membre` WHERE `email`='".$email."' AND `password`='".$password."'";
$result = $bdd->query($sql);
if ($data = $result->fetch(PDO::FETCH_ASSOC)) {
    $_SESSION'membre'] = $data'email'];
    header('Location: membre.php');
}
else{
    header('Location: login.php');
}
?>

Salut,
Je crois que le probléme vient de la ligne 26, quand tu fait le test avec mysql_num_rows.
tu utilisais PDO alor reste en PDO :D
essaies de remplacer la fonction mysql_num_rows par http://php.net/manual/fr/pdostatement.rowcount.php
Bonne Chance.

les versions PhP - SQL sont les même ?