Besoin d'aide je narrive pas redirer vers ma page de connexion....

Résolu/Fermé
caro - 9 mai 2020 à 09:10
 caro - 10 mai 2020 à 22:57
Bonjour,
jaimerai creer un espace membre sur mon site...jaimerai quapres linscription le visiteur soit redirigé sur la page de connexion ensuite apres la connexion il soit rediriger sur mon site avec son nom ou sa photo. jai fait le formulaire d'inscription qui marche super bien avec insertion dans la base de donnée .maintenant je narrive pas a redirigé le visiteur sur la page de connexion.. et comment recuperer son nom pour afficher sur mon site..ci dessous mes codes

code dinsert dans la BD

<?php

//connexion à la bdd
// penser à activer l'affichage des erreurs PDO : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
require_once 'connect_bd.php';

// on inclu la class user
require_once "user.class.php"; // on inclu la class user

//initialisation des variables 
$errors = array();

// recuperation PROPRE des variables AVANT de les utiliser
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$mdp = !empty($_POST['password']) ? $_POST['password'] : NULL;
$cmdp = !empty($_POST['cmdp']) ? $_POST['cmdp'] : NULL;
$prenom = !empty($_POST['prenom']) ? $_POST['prenom'] : NULL;
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;
$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
$numero = !empty($_POST['numero']) ? $_POST['numero'] : NULL;
$photo=$_FILES['photo']['name'];
$fichierTemporaire=$_FILES['photo']['tmp_name'];
 move_uploaded_file($fichierTemporaire,'./images/'.$photo);


//on instancie la class user
$oUser = new user($bdd);

if (isset($_POST['register'])) {

  //test sur le pseudo

  if (!$pseudo || !preg_match('/^[a-zA-Z0-9]+$/', $pseudo)) {
    $errors['pseudo'] = "votre pseudo n'est pas valide(alphanumerique)";
  } else {   
    $user = $oUser->getUserBypseudo($pseudo);
    if (!empty($user)) {
      $errors['pseudo'] = 'ce pseudo est déjà pris';
    }
  }

  // test sur email

  if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors['email'] = "email invalide";
  } else {
    $user = $oUser->getUserByemail($email);
    if ($user) {
      $errors['email'] = 'cet email existe deja pour un autre compte';
    }
  }
  //test sur le mot de passe:
  if (!$mdp || $mdp != $cmdp) {
    $errors['mdp'] = "entrer un mot de passe valide";
  }

  if (empty($errors)) {
    
    if($oUser->addUser($pseudo,$mdp,$prenom,$nom,$email,$numero,$photo)){
      die('felicitation votre compte a bien été créer');
      header('location: connexion_view.php');
    }
  }else{
    print_r($errors);
  }
}
?>


code de connexion
  <?php 

   //connexion à la bdd
   // penser à activer l'affichage des erreurs PDO : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
   require_once 'connect_bd.php';
   
   // on inclu la class user
   require_once "user.class.php"; // on inclu la class user
   
   //initialisation des variables 
   $errors = array();

   // recuperation PROPRE des variables AVANT de les utiliser
   $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL;
   $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL;
     
    $req = $bdd->prepare('SELECT * FROM tblusers WHERE (pseudo = :psdoconnect OR email = :psdoconnect)');
    $req->execute(['pseudo' => $pseudo]);
    $user = $req->fetch();
    if($user == null){
        $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
    }
    elseif(password_verify($mdp, $user->password)){
        $_SESSION['auth'] = $user;
        $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
        header('Location: boutique.php');
        exit();
    }
      else
      {
        $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
    }
}
 
 ?>



A voir également:

16 réponses

jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
9 mai 2020 à 09:12
Si tu laisses un die .. la redirection qui se trouve après ne se fera jamais..
0
ok merci jordan vous avez raison jai enlever le die et kan jexecute il me redirige efrectivement vers ma page de connexion.. maintenant kan je me connect il me met cette erreur la:!!

Erreur fatale : exception PDO non capturée: SQLSTATE [HY093]: numéro de paramètre non valide: le nombre de variables liées ne correspond pas au nombre de jetons dans C: \ xampp \ (Array) # 1 a la ligne 18


la ligne 18 correspond a $req->execute(['pseudo' =>$pseudo]);
// recuperation PROPRE des variables AVANT de les utiliser
   $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL;
   $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL;
     
    $req = $bdd->prepare('SELECT * FROM tblusers WHERE (pseudo = :psdoconnect OR email = :psdoconnect)');
    $req->execute(['pseudo' => $pseudo]);
    $user = $req->fetch();
    if($user == null){
        $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
    }
    elseif(password_verify($mdp, $user->password)){
        $_SESSION['auth'] = $user;
        $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
        header('Location: boutique.php');
        exit();
    }
      else
      {
        $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
    }
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
9 mai 2020 à 10:44
Compare le "nom" de tes variables dans ta requête ( les fameux jetons) et ceux (ou celui devrais je dire) que tu envois dans ton execute... La réponse devrait te sauter aux yeux.
0
jai trouvé mon erreur merci jordan mais il me met encore une autrte erreur ci dessous

Notice: Trying to get property 'Password' of non-object
la ligne concernée cest celle ci:
elseif(password_verify($mdp, $user->Password))
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
9 mai 2020 à 11:56
Déjà, sachant que je t'avais fourni la class USER .. et que cette class contenait, de mémoire, une méhtode permettant de faire l'authentification... je voudrais comprendre pourquoi tu réécris du code .....
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
9 mai 2020 à 12:18
Effectivement .. je ne sais pas comment l'utiliser avec l page d'inscription.. DC je l'ai juste inclu en début du code ci dessus...
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675 > caro
9 mai 2020 à 12:44
Redonne nous son contenu
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
9 mai 2020 à 13:04
Ok
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
9 mai 2020 à 13:05
voici le contenu de la class user

   <?php

class user {

  private $bdd = null;
  

  function __construct($bdd) {
    $this->bdd = $bdd;
  }

  public function dbExec($sql, $datas = NULL) {
    //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
    return $requete;
  }

  public function getUserBypseudo($pseudo) {
     $sql = 'SELECT id FROM tblusers WHERE pseudo = ?';
     $datas = array($pseudo);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function getUserByemail($email) {
     $sql = 'SELECT id FROM tblusers WHERE Email = ?';
     $datas = array($email);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function addUser($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo){
     //cryptage du mot de passe
     $mdp = password_hash($mdp, PASSWORD_BCRYPT);
     
     //insertion en BDD
     $sql = "INSERT INTO tblusers (pseudo, Password, Firstname, Lastname, Email, contact, avatar)
       values (?,?,?,?,?,?,?) ";
     $datas = array($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo);
     $res = $this->dbExec($sql,$datas);
     return $res;
  }
  
  /**
   * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password
   */
  public function authentification($pseudo,$mdp){
    $user = $this->getUserByPseudo($pseudo);
    //verifie qu'il n'y a bien qu'un seul user avec ce pseudo..
    if(!empty($user) && count($user)==1){
      $mdpBdd = $user[0]['password'];
      if (password_verify($mdp, $mdpBdd)){
        return $user;
      }else{
        return false;
      }
    }
  }
}
?>
0
effectivement jai toujour la classe user jai vu la partie authentification mais je ne savait pas comment lutiliser avec la partie connexion je me suis dit quil avait besoin du code ci dessus...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
9 mai 2020 à 14:18
  <?php

class user {

  private $bdd = null;
  

  function __construct($bdd) {
    $this->bdd = $bdd;
  }

  public function dbExec($sql, $datas = NULL) {
    //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
    return $requete;
  }

  public function getUserBypseudo($pseudo) {
     $sql = 'SELECT * FROM tblusers WHERE pseudo = ?';
     $datas = array($pseudo);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function getUserByemail($email) {
     $sql = 'SELECT * FROM tblusers WHERE Email = ?';
     $datas = array($email);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function addUser($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo){
     //cryptage du mot de passe
     $mdp = password_hash($mdp, PASSWORD_BCRYPT);
     
     //insertion en BDD
     $sql = "INSERT INTO tblusers (pseudo, Password, Firstname, Lastname, Email, contact, avatar)
       values (?,?,?,?,?,?,?) ";
     $datas = array($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo);
     $res = $this->dbExec($sql,$datas);
     return $res;
  }
  
  /**
   * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password
   */
  public function authentification($pseudo,$mdp){
    $user = $this->getUserByPseudo($pseudo);
    //verifie qu'il n'y a bien qu'un seul user avec ce pseudo..
    if(!empty($user) && count($user)==1){
      $mdpBdd = $user[0]['password'];
      if (password_verify($mdp, $mdpBdd)){
        return $user;
      }else{
        return false;
      }
    }else{
      return null;
    }
  }
}
?>


NB: J'ai changé les fonctions getUserBypseudo et getUserByemail pour qu'elles retournent toutes les infos du user et pas seulement son id
Il me semble que c'est ce que je t'avais donné... et si tel est le cas, je ne vois pas pourquoi tu les avais modifié...

J'ai un peu modifié également la fonction d'authentification.


Et pour ton code, (bien entendu tu as chargé la class user )
et donc.. ça donne :

<?php


// recuperation PROPRE des variables AVANT de les utiliser
$pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL;
$mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL;

$userAuth = $oUser->authentification($pseudo,$mdp);
if($userAuth){
  $_SESSION['auth'] = $userAuth;
  $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
  header('Location: boutique.php');
  exit();
} elseif($userAuth === false ) {
  $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
}else{
  $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
}

0
cc jordan merci bien... jai executé et on me met erreur: Undefined variable: oUser in C:\xampp\htdocs\Mb_Projet\mon blog\membres\connexion.php on line 17

Fatal error: Uncaught Error: Call to a member function authentification() on null a la ligne 8 du code ci dessus :
$userAuth = $oUser->authentification($pseudo,$mdp);
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
9 mai 2020 à 17:52
Tu dois remplacer oUser par la variable qui a été utilisé pour l'instantation de la classe user.
comme tu ne nous as pas montré le début de ton code impossible de savoir ce que tu as utilisé...
0
ah mince ...ok excuse moi jordan javais oublier dinstancier la class ... je lai fait il nya plus derreur mais au lieu de me rediriger vers mon site il maffiche une page vierge jai pourtant bien le header location .. jai essayer avec et sans la session flash ca ne passe pas.
  <?php 

   //connexion à la bdd
   require_once 'connect_bd.php';
   
   // on inclu la class user
   require_once "user.class.php"; 
   
   //initialisation des variables 
   $errors = array();

   //on instancie la class user
   $oUser = new user($bdd);

   // recuperation PROPRE des variables AVANT de les utiliser

   $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL;
   $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL;
   
   $userAuth = $oUser->authentification($pseudo, $mdp);
   if($userAuth){
     $_SESSION['auth'] = $userAuth;
     header('Location: boutique.php');
     exit();
   } 
      elseif($userAuth === false ) {
     $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
   }  else{
     $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
   }

 
 ?>



0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
9 mai 2020 à 20:48
Il te manque le démarrage des sessions non ?
Et as tu activé l'affichage des erreurs PHP ?

Après, peux tu faire des tests en plaçant (juste le temps des tests...) quelques echo dans le code (et en retirant une partie du code )
Par exemple
  <?php 
<?php
  session_start(); // si tu ne l'as pas déjà mis..

   //connexion à la bdd
   require_once 'connect_bd.php';
   
   // on inclu la class user
   require_once "user.class.php"; 
   
   //initialisation des variables 
   $errors = array();

   //on instancie la class user
   $oUser = new user($bdd);

   // recuperation PROPRE des variables AVANT de les utiliser

   $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL;
   $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL;
   
echo " On arrive bien là";




Si le echo s'affiche, tu peux ensuite tester
<?php
  session_start(); // si tu ne l'as pas déjà mis..


   //connexion à la bdd
   require_once 'connect_bd.php';
   
   // on inclu la class user
   require_once "user.class.php"; 
   
   //initialisation des variables 
   $errors = array();

   //on instancie la class user
   $oUser = new user($bdd);

   // recuperation PROPRE des variables AVANT de les utiliser

   $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL;
   $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL;
   
   $userAuth = $oUser->authentification($pseudo, $mdp);
   print_r( $userAut);
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 15:24
bonjour jordan.. jai tester le echo il saffiche .. jai executer le print_r et ca maffiche une page
blanche vierge .. cest normal ? sinon quesqui devrait safficher en executant le print_r
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
10 mai 2020 à 15:41
Le champ "Password" dans ta bdd est bien écrit avec un "P" majuscule ?
Dans ce cas, modifie la class user :
public function authentification($pseudo,$mdp){
    $user = $this->getUserByPseudo($pseudo);
    //verifie qu'il n'y a bien qu'un seul user avec ce pseudo..
    if(!empty($user) && count($user)==1){
      $mdpBdd = $user[0]['Password']; // Password au lieu de password
      if (password_verify($mdp, $mdpBdd)){
        return $user;
      }else{
        return false;
      }
    }else{
      return null;
    }
  }

0
jai changé tjr pareil
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675 > caro
10 mai 2020 à 17:02
Tu peux me faire un dump de ta bdd ?
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 17:19
de texporter ma bd?
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 17:32
comment je fais jordan? comment je texporte ma bd
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675 > caro
10 mai 2020 à 17:52
Depuis ton phpmyadmin tu génères un export au format sql de ta base de données
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
10 mai 2020 à 20:12
Donc...

Le code est bon.
Il faut juste lui dire quoi faire lorsque l'identifiant n'est pas bon...
par exemple...
 header('Location: login.php');

Sinon.. normal que rien ne s'affiche.
    if($userAuth){
     $_SESSION['auth'] = $userAuth;
     header('Location: boutique.php');
     exit();
   } elseif($userAuth === false ) {
     $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
     echo 'Identifiant ou mot de passe incorrecte';
     header('Location: login.php');
     exit();
   }  else{
     $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
     header('Location: login.php');
     exit();
   }


Ensuite..
Ton user
(4, 'Fatim', 'Fatima', 'marie pascale', 'Kouassi', '***@***', 0, ''),

n'est pas bon.. le Password n'est pas hashé ... Donc si c'est lui que tu utilises pour vérifier.. normal que ça ne marche pas.
Et enfin..
La structure de ta table n'est pas bonne non plus.
Le champ pour stocker le Password n'est pas assez grand.

Modifie la structure de ta table par :

CREATE TABLE IF NOT EXISTS `tblusers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pseudo` varchar(20) CHARACTER SET utf8 NOT NULL,
  `Password` varchar(256) CHARACTER SET utf8 NOT NULL,
  `Firstname` text CHARACTER SET utf8 NOT NULL,
  `Lastname` text CHARACTER SET utf8 NOT NULL,
  `Email` varchar(60) CHARACTER SET utf8 NOT NULL,
  `contact` int(15) NOT NULL,
  `avatar` varchar(256) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  KEY `pseudo` (`pseudo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Il te faudra supprimer puis recréer tes users si tu veux que les infos soient correctement enregistrées.
Par exemple, moi je me suis créer un user de test
<?php
 require_once 'connect_bd.php';
 // on inclu la class user
 require_once "user.class.php"; // on inclu la class user

$oUser = new user($bdd);
$oUser->addUser('jojo','azerty','jordane','re','jojo@test.fr',1,'moi.jpeg');
0
Ok je le fait mais .. la ligne Fatima la c'était un essaie sans cryptage du mot je l'avais fait avant dinserer le code du cryptage j'ai juste pas voulu supprimer.. sinon c'est avec les autre usées que je fais le test de connexion... Ok je change la structure de ma base et je reessai
0
Mais j'ai fait le var_dump a la place du print_r et là ça m'a afficher NULL
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
10 mai 2020 à 20:47
Le null, si tu regardes le code de la fonction authentification .. correspond au fait qu'il ne trouve pas l'utilisateur...

Donc, soit tu écrits mal le pseudo de l'utilisateur ... soit tes variables ne sont pas bien envoyées par ton formulaire.
Fais donc un print_r($_POST); pour voir ce que contient ton submit ...
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 20:54
Ok je fait le print_r
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 20:58
J'ai fait le print_r ça m'affiche ça: array() c'est tt ça veux dire kil ne récupère pas les donnée du formulaire ?
0
caro > caro
10 mai 2020 à 21:03
Il récupère bien les variables Jordan... J'ai essayer de faire un print_r ($_POST) sur un nvelle enregistrement voilà ce qui s'affiche:
0
jai fait une nvelle inscription et jai executer le print_r($_POST) kan je clik sur valider voila ce qui saffiche
Array ( [psdoconnect] => affia [passconnect] => aff [submit] => se connecter )
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
10 mai 2020 à 21:24
Ce n'est pas à l'inscription.. mais au login ....
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 21:27
Sisi c'est du login que je parle
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675 > caro
10 mai 2020 à 21:33
Donc.. Ton $_POST contient bien le pseudo et le password... ça devrait donc être bon.
Que se passe t'il ?
Tu pourrais nous remontrer ton code complet ?
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 21:41
ok
0
Romson8 Messages postés 4 Date d'inscription lundi 16 mars 2020 Statut Membre Dernière intervention 10 mai 2020
10 mai 2020 à 21:30
//après avoir écrit la requête pour la connexion
header('location: lapage.php');
0
  <?php 
         session_start(); 
   //connexion à la bdd
   // penser à activer l'affichage des erreurs PDO :
   require_once 'connect_bd.php';
   
   // on inclu la class user
   require_once "user.class.php"; // on inclu la class user
   
   //initialisation des variables 
   $errors = array();

   //on instancie la class user
   $oUser = new user($bdd);

   // recuperation PROPRE des variables AVANT de les utiliser
   $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : NULL;
   $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : NULL;
    print_r($_POST)
   
   
   $userAuth = $oUser->authentification($pseudo, $mdp);
   if($userAuth){
    $_SESSION['auth'] = $userAuth;
    header('Location: boutique.php');
    exit();
  } elseif($userAuth === false ) {
    $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
    echo 'Identifiant ou mot de passe incorrecte';
    header('Location: login.php');
    exit();
  }  else{
    $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
    header('Location: login.php');
    exit();
  }

 
 ?>




0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
10 mai 2020 à 22:05
Et Donc... ?
Que se passe t'il ?
As tu, comme je te l'ai demandé à plusieurs reprises, activé l'affichage des erreurs php ?

Sachant que les redirections ne peuvent pas marcher si tu as déjà des choses d'afficher ( le print_r et le echo..).

On va y aller par étape :

Que donne ce code :
<?php
  session_start();

//Affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

 require_once 'connect_bd.php';
 
 // on inclu la class user
 require_once "user.class.php"; // on inclu la class user
 
 //initialisation des variables 
 $errors = array();
 
 //on instancie la class user
 $oUser = new user($bdd);

 
 // recuperation PROPRE des variables AVANT de les utiliser
 $pseudo = !empty($_POST['psdoconnect']) ? $_POST['psdoconnect'] : 'jojo';
 $mdp = !empty($_POST['passconnect']) ? $_POST['passconnect'] : 'azerty';
 
 $userAuth = $oUser->authentification($pseudo, $mdp);
 
 echo "<br>Pseudo:" . $pseudo ;
 echo "<br>Password :". $mdp ;
 echo "<pre>";
 var_dump($userAuth);
 echo "</pre>";
 
 

 
  if($userAuth){
   $_SESSION['auth'] = $userAuth;
   echo '<br>Connexion OK';
   //header('Location: boutique.php');
   exit();
 } elseif($userAuth === false ) {
   $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
   echo '<br>Identifiant ou mot de passe incorrecte';
   //header('Location: login.php');
   exit();
 }  else{
   $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
   echo '<br>Identifiant ou mot de passe incorrecte';
  //header('Location: login.php');
   exit();
 }

0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675 > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 22:06
Et on est bien d'accord que tu as modifié la structure de ta table et que tu avais bien pris ma correction du fichier user.class.php ?

Je te le remet au cas où
  <?php

class user {

  private $bdd = null;
  

  function __construct($bdd) {
    $this->bdd = $bdd;
  }

  public function dbExec($sql, $datas = NULL) {
    //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
    return $requete;
  }

  public function getUserBypseudo($pseudo) {
     $sql = 'SELECT * FROM tblusers WHERE pseudo = ?';
     $datas = array($pseudo);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function getUserByemail($email) {
     $sql = 'SELECT * FROM tblusers WHERE Email = ?';
     $datas = array($email);
     $res = $this->dbExec($sql,$datas);
     return $res->fetchAll();
  }
  
  public function addUser($pseudo,$mdp,$prenom,$nom,$email,$contact=0,$photo=''){
     //cryptage du mot de passe
     $mdp = password_hash($mdp, PASSWORD_BCRYPT);
     
     //insertion en BDD
     $sql = "INSERT INTO tblusers (pseudo, Password, Firstname, Lastname, Email, contact, avatar)
       values (?,?,?,?,?,?,?) ";
     $datas = array($pseudo,$mdp,$prenom,$nom,$email,$contact,$photo);
     $res = $this->dbExec($sql,$datas);
     return $res;
  }
  
  /**
   * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password
   */
  public function authentification($pseudo,$mdp){
    $user = $this->getUserByPseudo($pseudo);
    //verifie qu'il n'y a bien qu'un seul user avec ce pseudo..
    if(!empty($user) && count($user)==1){
      $mdpBdd = $user[0]['Password'];
      if (password_verify($mdp, $mdpBdd)){
        return $user;
      }else{
        return false;
      }
    }else{
      return null;
    }
  }
}
?>

0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 22:25
oui jai modifier la structure de la table... voila ce que donne le code avec les ini_set:

Pseudo:jojo
Password :azerty
NULL

Identifiant ou mot de passe incorrecte
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675 > caro
Modifié le 10 mai 2020 à 22:27
Dis voir... tu passes bien par ton formulaire de connexion ???
Car là, ça indique que ta variable POST est vide ....
Quel est le code html de ta page de login ??
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 22:32
voici le code html de ma page de connexion

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="logn.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Play" rel="stylesheet">
</head>

<body>

   <div class="signin">

<form action="connexion.php" method="post">

<h2 style="color:#fff;">Se connecter</h2>

<input type="text" name="psdoconnect" placeholder="pseudo" required><br><br>

<input type="password" name="passconnect" placeholder="Password" required /><br /><br />

<input type="submit" value="se connecter" name="submit" /><br /><br />

<div id="container">



</form>

</div>

</body>
</html>













0
il me redirige vers mon site maintenant comment je fais pour recuperer le nom de celui qui vient de se connecter et lafficher dans le menu de naviguation?
0
avec le header en commentaire voila ce quil maffiche:


Pseudo:affia
Password :aff
array(1) {
[0]=>
array(8) {
["id"]=>
string(1) "1"
["pseudo"]=>
string(5) "affia"
["Password"]=>
string(60) "$2y$10$3XwTVEsrVdRBpuGRgZmjEuSBdoGDnNXrriFZQsGy3X1g258oZ9Bg6"
["Firstname"]=>
string(5) "herve"
["Lastname"]=>
string(2) "Sy"
["Email"]=>
string(17) "***@***"
["contact"]=>
string(8) "56318852"
["avatar"]=>
string(17) "1547479743728.jpg"
}
}

Connexion OK




quand (//header('Location: boutique.php');) nest pas en commentaire il me redirige sur boutique.php
0
jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024 4 675
10 mai 2020 à 22:51
Donc c'est bon.

Tu retires les echo/var_dump
tu réactives la redirection
et tout sera bon.

Et pour récupérer les infos de l'utilisateur connecté... il suffit de récupérer le contenu de la variable
$_SESSION['auth']    

mais là.. c'est une autre question.

Pense à mettre ce sujet en résolu et ouvre en un autre si tu as de nouveaux soucis.
0
caro > jordane45 Messages postés 38200 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 juin 2024
10 mai 2020 à 22:57
ok merci bien jordan...
0