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

Langage PHP Discussion :

erreur syntaxe fetch()


Sujet :

Langage PHP

  1. #1
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    <?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 expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ligne 21 : $check_credentials_query->execute(array('password' => $password, 'username' => $username)); 
    /* Suite du code */
    ligne 29 : $userdata=$check_credentials_query->fetch();
    une réponse vous a permis d'avancer ?

  3. #3
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    Par défaut
    Merci ça fonctionne.
    Mais au fait à qui sert cette variable?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    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.
    une réponse vous a permis d'avancer ?

  5. #5
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $check_credentials_query n'est pas stocké dans la session.
    Par contre effectivement ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $userdata=$check_credentials->fetch();
    ne sert à rien.
    Si tu souhaites avoir les informations sur l'utilisateur connecté dans la session il faudrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION["userdata"]=$check_credentials->fetch();
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre habitué

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 171
    Points
    171
    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.

Discussions similaires

  1. Erreur syntaxe
    Par Anduriel dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/12/2005, 19h45
  2. [erreur syntaxe]
    Par viny dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/11/2005, 15h49
  3. Erreur syntaxe
    Par diaboloche dans le forum Langage
    Réponses: 12
    Dernier message: 19/10/2005, 16h47
  4. erreur syntaxe dans requete
    Par dom - ien moutiers dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/04/2004, 11h54
  5. [EXISTS] Version MySql ou erreur syntaxe ?
    Par Kimael dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/04/2004, 17h30

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