IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

La fonction password_verif [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut La fonction password_verif
    Bonjour, voici mon code :

    class/userManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
     
    <?php
     
    class userManager {
     
    	private $_db;
     
    	public function __construct(PDO $db) {
     
    		$this->setDb($db);
    	}
     
    	public function setDb($dbh) {
     
    		$this->_db = $dbh;
    	}
     
    	public function insertUser(User $user) {
     
    		$sql = 'INSERT INTO user (pseudo, pass) VALUES (:pseudo, :pass)';
     
    		$pseudo = $user->getPseudo());
    		$pass = $user->getPass());
     
    		$userpass_form = password_hash($pass, PASSWORD_DEFAULT);
     
     
    		$stmnt = $this->_db->prepare($sql);
     
    		$stmnt->bindParam(':pseudo', $pseudo);
    		$stmnt->bindParam(':pass', $userpass_form);
     
    		$stmnt->execute();
    	}
     
    	public function getPseudo($pseudo) {
     
    		$sql = 'SELECT pseudo FROM user WHERE pseudo = :pseudo';
     
            $stmnt = $this->_db->prepare($sql);
     
            $stmnt->bindParam(':pseudo', $pseudo);
     
            $stmnt->execute(array(
     
            	':pseudo' => $pseudo
            ));
     
            $count = $stmnt->rowCount();
     
            if($count <= 0) {
     
            	return true;
            }
            else {
     
            	return false;
            }
    	}
     
    	public function getUser($pseudo) {
     
    		$sql = 'SELECT pseudo, pass FROM user WHERE pseudo = :pseudo AND pass = :pass';
     
    		$stmnt = $this->_db->prepare($sql);
     
    		$stmnt->bindParam(':pseudo', $pseudo);
    		$stmnt->bindParam(':pass', $pass);
     
    		$stmnt->execute(array(
     
    			':pseudo' => $pseudo,
    			':pass' => $pass
    		));
     
    		$data = $stmnt->fetch(PDO::FETCH_ASSOC);
     
    		if(password_verify($pass, $data['pass'])) {
     
    			return true;
    		}
            else {
     
            	return false;
            }
        }
    }
    process/process_login.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    <?php
     
    require('includes/inc_connexion.php');
    require('class/userManager.php');
     
    if(isset($_POST['submit_form'])) {
     
        $pseudo_form = trim($_POST['pseudo_form']);
        $userpass_form = trim($_POST['userpass_form']);
     
        if((isset($pseudo_form)) AND (isset($userpass_form))) {
     
            $manager = new userManager($db);
     
            if(!$manager->getUser($pseudo_form, $userpass_form)) {
     
                $message = '<p class="error">Mot de passe incorrect !</p>';
            }
            else {
     
                $message = '<p class="success">Accès OK !</p>';
            }
        }
        else {
     
            $message = '<p class="error">Identifiants incorrects</p>';
        }
    }
    Quand je veux me connecter j'ai ce message d'erreur ligne 79 (userManager.php) -> Notice: Trying to access array offset on value of type bool

    Merci pour votre aide & bonne journée

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonsoir,
    il y a plusieurs chose qui sont incorrecte dans votre méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    public function getUser($pseudo) {
     
    		
                   // cette requête est incohérente, vous voulez vérifier le mot de passe hashé, donc vous ne le connaissez pas
                   $sql = 'SELECT pseudo, pass FROM user WHERE pseudo = :pseudo AND pass = :pass';
     
    		$stmnt = $this->_db->prepare($sql);
     
    		$stmnt->bindParam(':pseudo', $pseudo);
                    // vous essayer donc de passer une variable $pass, mais vous ne connaissez pas justement la valeur
                    // de plus d'où sort la variable $pass ? puisque en paramêtre vous en passez que $pseudo
    		$stmnt->bindParam(':pass', $pass);
     
    		$stmnt->execute(array(
     
    			':pseudo' => $pseudo,
                            // variable $pass inexistante
    			':pass' => $pass
    		));
     
    		$data = $stmnt->fetch(PDO::FETCH_ASSOC);
     
                      // variable $pass inexistante
    		if(password_verify($pass, $data['pass'])) {
     
    			return true;
    		}
            else {
     
            	return false;
            }
        }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir, merci à toi, j'ai finit par trouver, voici le résultat =>

    class/userManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    <?php
     
    class userManager {
     
    	private $_db;
     
    	public function __construct(PDO $db) {
     
    		$this->setDb($db);
    	}
     
    	public function setDb($dbh) {
     
    		$this->_db = $dbh;
    	}
     
    	public function insertUser(User $user) {
     
    		$sql = 'INSERT INTO user (pseudo, pass) VALUES (:pseudo, :pass)';
     
    		$pseudo = htmlspecialchars($user->getPseudo());
    		$pass = htmlspecialchars($user->getPass());
     
    		$userpass_form = password_hash($pass, PASSWORD_DEFAULT);
     
     
    		$stmnt = $this->_db->prepare($sql);
     
    		$stmnt->bindParam(':pseudo', $pseudo);
    		$stmnt->bindParam(':pass', $userpass_form);
     
    		$stmnt->execute();
    	}
     
    	public function getPseudo($pseudo) {
     
    		$sql = 'SELECT pseudo FROM user WHERE pseudo = :pseudo';
     
            $stmnt = $this->_db->prepare($sql);
     
            $stmnt->bindParam(':pseudo', $pseudo);
     
            $stmnt->execute(array(
     
            	':pseudo' => $pseudo
            ));
     
            $count = $stmnt->rowCount();
     
            if($count <= 0) {
     
            	return true;
            }
            else {
     
            	return false;
            }
    	}
     
    	public function getUser($pseudo) {
     
    		$sql = 'SELECT pseudo, pass FROM user WHERE pseudo = :pseudo';
     
    		$stmnt = $this->_db->prepare($sql);
     
    		$stmnt->bindParam(':pseudo', $pseudo);
     
     
    		$stmnt->execute(array(
     
    			':pseudo' => $pseudo
    		));
     
    		$data = $stmnt->fetch(PDO::FETCH_ASSOC);
     
    		if($data AND password_verify($_POST['userpass_form'], $data['pass'])) {
     
    			return true;
    		}
            else {
     
            	return false;
            }
        }
    }

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Ha oui, mais non.
    Vous ne devez pas avoir de $_POST dans votre class.

    vous devriez avoir quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public function getUser($pseudo,$pass)

  5. #5
    Invité
    Invité(e)
    Par défaut
    class/userManager.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public function getUser($pseudo, $pass) {
     
    		$sql = 'SELECT pseudo, pass FROM user WHERE pseudo = :pseudo AND pass = :pass';
     
    		$stmnt = $this->_db->prepare($sql);
     
    		$stmnt->bindParam(':pseudo', $pseudo);
    		$stmnt->bindParam(':pass', $pass);
     
     
    		$stmnt->execute(array(
     
    			':pseudo' => $pseudo,
    			':pass' => $pass
    		));
     
    		$data = $stmnt->fetch(PDO::FETCH_ASSOC);
     
    		if($data AND password_verify($pass, $data['pass'])) {
     
    			return true;
    		}
            else {
     
            	return false;
            }
        }
    process/process_login.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    require('includes/inc_connexion.php');
    require('class/userManager.php');
     
    if(isset($_POST['submit_form'])) {
     
        $pseudo_form = trim($_POST['pseudo_form']);
        $userpass_form = trim($_POST['userpass_form']);
     
        if((!empty($pseudo_form)) AND (!empty($userpass_form))) {
     
            $manager = new userManager($db);
     
            if(!$manager->getUser($pseudo_form, $userpass_form)) {
     
                $message = '<p class="error">Erreur de Pseudo et/ou Pass !</p>';
            }
            else {
     
                echo '<p class="success">Accès OK !</p>';
            }
        }
        else {
     
            $message = '<p class="error">Identifiants incorrects</p>';
        }
    }
    Bonjour, en faisant ce que tu m'as dit, j'ai ce message -> Erreur de Pseudo et/ou Pass !

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Oui, mais il faut retenir compte de mes premières remarques !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      // cette requête est incohérente, vous voulez vérifier le mot de passe hashé, donc vous ne le connaissez pas
                   $sql = 'SELECT pseudo, pass FROM user WHERE pseudo = :pseudo AND pass = :pass';
     
    		$stmnt = $this->_db->prepare($sql);
     
    		$stmnt->bindParam(':pseudo', $pseudo);
                    // vous essayer donc de passer une variable $pass, mais vous ne connaissez pas justement la valeur
                    // de plus d'où sort la variable $pass ? puisque en paramêtre vous en passez que $pseudo
    		$stmnt->bindParam(':pass', $pass);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo