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 :

[MySQLi] - problème récupération de valeur fetch()


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut [MySQLi] - problème récupération de valeur fetch()
    Bonjour tout le monde,
    j'essaie de coder un "espace Membres" avec une base de données et cookies. C'est l'occasion pour moi de faire mes premiers pas dans l'univers de MySQLi et des classes...
    L'idée est de vérifier si le cookie contenant le mot de passe est identique au mot de passe contenu dans ma base.
    Le code (patience... il arrive) que j'ai fait marche très bien en local (wamp) mais ne marche pas en ligne ! Pourrez-vous m'aider ?

    Voici les codes :

    test.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    	require('connexionBD.inc.php');
    	require('mysql.class.php');
     
    	$sqlname = 'membres';
     
    	$mysql = New Mysql();
    	$sqlpwd = $mysql->verify_Pass($sqlname);
     
    	if($_COOKIE['pwd'] == $sqlpwd) echo 'OK';
    	else echo 'ERREUR';
    ?>
    mysql.class.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
     
    <?php
    	require_once 'connexionBD.inc.php';
     
    	class Mysql {
    		private $conn;
     
    		function __construct() {
    			$this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    		}
     
    		function verify_Pass($sqlname) {
    			$query = "SELECT password
                                          FROM membres
                                          WHERE username = ?
                                          LIMIT 1";
     
    			if($stmt = $this->conn->prepare($query)) {
    				$stmt->bind_param('s', $sqlname);
    				$stmt->execute();
     
    				$stmt->bind_result($password);
    				$stmt->fetch();
    				return $password;
     
    				$stmt->close();
    			}
    		}
    	}
    En local, ça m'affiche : OK / En ligne : ERREUR

    Je ne comprends pas pourquoi...
    Merci de votre intérêt et de votre aide,
    Cdt

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Où/comment se fait le stockage dans le cookie ?

    Que donnent var_dump($sqlpwd) et var_dump($_COOKIE['pwd']) ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut
    Salut asdf007,
    j'ai une page "connexion.php" qui permet aux membres de rentrer un couple username/password avec vérification par rapport à la base de données. Si c'est ok alors redirection vers leur page et création de cookies (name et pwd).
    Ce que j'essaie de faire avec le code donné c'est si quelqu'un rentre directement sur la page membre.php, je vérifie si les valeurs de son cookie correspond aux valeurs de la base de données.
    Le truc que je ne comprends pas c'est
    echo $sqlpwd donne ABCD et echo $_COOKIE['pwd'] donne aussi ABCD...
    mais si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($_COOKIE['pwd'] == $sqlpwd) {
        //je me connecte
    }
    else //erreur
    j'obtiens erreur !

    J'ai vu dans la doc MySQLi chez php dot net/manual, il raconte quelque chose sur "fetch()" renvoie une référence alors que j'ai besoin d'une valeur ??? je ne comprends rien ! (Désolé)

    var_dump($sqlpwd) renvoie string(4) "ABCD "

    var_dump($_COOKIE['RRpwd']) renvoie NULL

    Je pense que ça devrait m'aider... mais non !
    Merci de ton aide

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    RRpwd ? C'est quoi ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut
    c'est pwd, erreur de frappe sorry...

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Tu utilise ceci : $stmt->bind_result($password); , or, ça nexiste pas, bind_result n'est pas une méthode de PDO.
    Aussi, ce n'est pas bind_param() mais bindParam()
    Donc n'invente pas des trucs, et fait attention à la syntaxe. Le mieux, c'est de te référer à la doc officielle :
    PDO : http://www.php.net/manual/fr/class.pdo.php
    PDOStatement : http://www.php.net/manual/fr/class.pdostatement.php


    A mon sens, il n'est pas utile de récupérer le mot passe dans la Bdd pour ensuite faire une comparaison, autant le rajouter directement comme condition dans la requête.
    La méthode retournerait true ou false (existe ou pas) :
    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
     
    function verify_Pass($sqlname, $sqlpwd) {
    	$query = 'SELECT COUNT(*) AS total
    		FROM membres
    		WHERE username = :user
    		AND password = :pass
    		LIMIT 1';
     
    	if ($stmt = $this->conn->prepare($query)) {
    		$stmt->bindValue(':user', $sqlname);
    		$stmt->bindValue(':pass', $sqlpwd);
    		$stmt->execute();
    		$membre = $stmt->fetch(PDO::FETCH_ASSOC);
    		$stmt->close();
    		return ((int)$membre['total'] === 1) ? true : false;
    	}
    	return false;
    }
    Dans la page :
    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
     
    require('connexionBD.inc.php');
    require('mysql.class.php');
     
    $sqlname = 'membres';
    $sqlpwd = $_COOKIE['pwd'];
     
    $mysql = New Mysql();
    $verif_pass = $mysql->verify_Pass($sqlname, $sqlpwd);
     
    if ($verif_pass === true) {
    	echo 'OK';
    }
    else {
    	echo 'ERREUR';
    }

    A coté de ça, si le cookie retourne NULL pour le mot de passe, tout ceci ne fonctionnera pas.
    Question comme ça.
    Pourquoi stocker ces infos dans un cookie au lieu des sessions ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/10/2014, 16h05
  2. [SAX] Problème récupération de valeur
    Par pejji dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 10/04/2013, 11h14
  3. Réponses: 12
    Dernier message: 20/02/2011, 18h17
  4. [BO 6.1.3] Problème récupération de valeurs
    Par atlain75 dans le forum Débuter
    Réponses: 3
    Dernier message: 31/12/2009, 14h40
  5. Problème récupération de valeurs récupérées dans BDD
    Par Gordon Freeman dans le forum ASP
    Réponses: 6
    Dernier message: 27/10/2008, 10h00

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