Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre habitué

    Profil pro hugues dupont
    Pompier
    Inscrit en
    janvier 2010
    Messages
    371
    Détails du profil
    Informations personnelles :
    Nom : hugues dupont
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : janvier 2010
    Messages : 371
    Points : 139
    Points
    139

    Par défaut erreur syntaxe fetch()

    bonjour,

    je viens d'acheter la revue "web design" sur savoir tout faire avec php et Mysql.
    C'est une petite bible.

    Je viens d'essayer un tuto où quelques erreurs de syntaxes y étaient.
    Après correction de quelques unes, il me reste celle là.
    Je ne sais pas d'où ça vient.

    message erreur
    Code :
    Fatal error: Call to a member function fetch() on a non-object in F:\EasyPHP-5.3.9\www\tuto php\login.php on line 29
    code du formulaire
    Code :
    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
    <?php
    include("config.php");
     
    //Vérification que la page est appelée en POST
    if(!$_SERVER["REQUEST_METHOD"]=="POST"){
    	die("Accès non autorisé");
    }
     
    //Vérification entrée login et password
    if(strlen($_POST["username"])<=0 or strlen($_POST["password"])<=0){
    	die("Vous devez entrer un nom d'utilisateur et un mot de passe");
    }
     
    //Le cas échéant, on crée les variables et on hashe le password.
     
    $username = $_POST["username"];
    $password = hashPassword($_POST["password"]);
     
    //test identifiant psword
    $check_credentials_query = $mysql->prepare("SELECT * FROM users WHERE user_name=:username AND user_password=:password");
    $check_credentials = $check_credentials_query->execute(array('password' => $password, 'username' => $username));
     
    if($check_credentials_query->rowCount() == 1) {  
     
    //On démarre les sessions.
     
    	session_start();
    	session_name("dispo_SPV"); 
    	$userdata=$check_credentials->fetch();
    	$_SESSION["authenticated"] = true;
    	//	On crée un token à usage unique puis on le crypte en utilisant le même cryptage que le mot de passe.
     
    	$_SESSION["token_uncrypted"] = uniqid();
    	$_SESSION["token"] = hashpassword($_SESSION["token_uncrypted"]);
     
    	//On redirige le visiteur vers la page protégée de votre choix.
     
    	header("Location: userarea.php");
    	exit();
    } else {
        die("Mauvais couple d’identifiants.");
    }
     
    ?>

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 764
    Points : 1 374
    Points
    1 374

    Par défaut

    Bonjour,

    c'est normal la fonction execute() de PDO renvoi un booléen et non un PDO::Statement.

    Tu doit passer par ta variable $check_credentials_query pour pouvoir utiliser ta méthode fetch().

    Ce qui donnera :
    Code :
    1
    2
    3
    ligne 21 : $check_credentials_query->execute(array('password' => $password, 'username' => $username)); 
    /* Suite du code */
    ligne 29 : $userdata=$check_credentials_query->fetch();

  3. #3
    Membre habitué

    Profil pro hugues dupont
    Pompier
    Inscrit en
    janvier 2010
    Messages
    371
    Détails du profil
    Informations personnelles :
    Nom : hugues dupont
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : janvier 2010
    Messages : 371
    Points : 139
    Points
    139

    Par défaut

    Merci ça fonctionne.
    Mais au fait à qui sert cette variable?

  4. #4
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 764
    Points : 1 374
    Points
    1 374

    Par défaut

    Si j'ai bien compris ta question,

    $check_credentials_query stocke le "résultat" de ta requête, mais tu ne peut pas l'exploiter comme ça,

    il faut que tu passe par la méthode fetch() (ou fetchAll() mais elle retourne le résultat différemment) du résultat, cette méthode va donner chaque ligne du résultat à un tableau, objet (selon le paramètre que tu donne à la méthode fetch()),

    et c'est via ce tableau ou cette objet que tu peut utiliser les informations reçu de la base de données.

  5. #5
    Membre habitué

    Profil pro hugues dupont
    Pompier
    Inscrit en
    janvier 2010
    Messages
    371
    Détails du profil
    Informations personnelles :
    Nom : hugues dupont
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : janvier 2010
    Messages : 371
    Points : 139
    Points
    139

    Par défaut

    En fait ce que je ne comprend pas c'est à quoi ça sert d'avoir cette valeur dans la session .
    À quoi peut elle servir plus tard ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 400
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 400
    Points : 31 187
    Points
    31 187

    Par défaut

    $check_credentials_query n'est pas stocké dans la session.
    Par contre effectivement ta ligne
    Code :
    $userdata=$check_credentials->fetch();
    ne sert à rien.
    Si tu souhaites avoir les informations sur l'utilisateur connecté dans la session il faudrait
    Code :
    $_SESSION["userdata"]=$check_credentials->fetch();

  7. #7
    Membre habitué

    Profil pro hugues dupont
    Pompier
    Inscrit en
    janvier 2010
    Messages
    371
    Détails du profil
    Informations personnelles :
    Nom : hugues dupont
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : janvier 2010
    Messages : 371
    Points : 139
    Points
    139

    Par défaut

    ok si j'ai bien compris ton explication, cette fonction me permet via un tableau, d'avoir tous les renseignements sur l'utilisateur (tous les champs de la table) et de les utiliser dans d'autre formulaires?

    Effectivement, je viens de voir que j'avais supprimé une ligne vue que la première fonction ne marchait pas.

    Code :
    1
    2
    $userdata=$check_credentials_query->fetch();
    $_SESSION=$userdata;
    c'est la première fois que je vois une déclaration de session sans attribut du type ["xxxx"]. Quelle est l'intêret????

    Je comprend vite mais il faut m'expliquer longtemps

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 400
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 400
    Points : 31 187
    Points
    31 187

    Par défaut

    $_SESSION se comporte comme une variable tableau normale.

    dans ton code $userdata est un tableau contenant par exemple $userdata['username']
    donc tu obtiendras $_SESSION['username'] etc.

  9. #9
    Membre habitué

    Profil pro hugues dupont
    Pompier
    Inscrit en
    janvier 2010
    Messages
    371
    Détails du profil
    Informations personnelles :
    Nom : hugues dupont
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : janvier 2010
    Messages : 371
    Points : 139
    Points
    139

    Par défaut

    G compris.
    MERCIIIIIIIIIIII

    Tes explications sont super simples à comprendre et ça c'est cool.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •