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 :

Compréhension du message d'erreur


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Points : 92
    Points
    92
    Par défaut Compréhension du message d'erreur
    Bonjour/ bonsoir,

    Je suis dans l'apprentissage de PDO. Pour ce faire, j'ai un simple 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
     
    <?php if(!empty ($_POST)){
        if($auth->login($_POST));
    }
     else {
         echo 'Mauvais identifiant !';
    } 
    //------------------------------------------------------------------------
    ?>
    <form name="formIdent" id="formIdent" method="post" action="#">
                <label>
                    Votre identifiant :
                    <input type="text" name="login" id="login">
                </label>
                <label>
                    Votre mot de passe :
                    <input type="password" name="password" id="password">
                </label>
                <label>
                    <input type="submit" name="connect" id="connect" value="Connexion !">
                </label>
            </form>
    Dont les valeurs retournées sont gérées par la classe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Auth {
     
        function login($data) {
            global $PDO;
            $select = $PDO->prepare('SELECT * FROM users
                WHERE login = :login AND password = :password');
            $result = $select->execute($data);
            $result = $select->fetchAll();
            var_dump($result);
        }
    }
    $auth = new Auth();
    J'obtiens le message d'erreur suivant:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\wamp\www\...
    ...
    Auth->login( $data = array ('login' => 'admin', 'password' => 'admin', 'connect' => 'Connexion !') )
    PDOStatement->execute( array ('login' => 'admin', 'password' => 'admin', 'connect' => 'Connexion !') )
    Je crois comprendre que le nombre de paramètres de la requête ne correspond pas au nombre qu'elle doit traiter... Est-ce à dire que l'index "'connect' => 'Connexion !'" est de trop ? (je ne vois que ça...) Mais dans ce cas, comment corriger cela ?
    merci,

  2. #2
    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
    C'est bien ton submit qui est en trop.
    Transmettre tout le $_POST n'est pas une bonne idée, tu te retrouveras souvent avec plus de champ que necessaire dans la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $auth->login(array($_POST['login'], $_POST['password']);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Points : 92
    Points
    92
    Par défaut re:
    Merci. Mais si j'écris ça maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     $select = $PDO->prepare('SELECT * FROM users
                WHERE login = :login AND password = :password');
            $select->bindParam(':login', $_POST['login'], PDO::PARAM_STR);
            $select->bindParam(':password', $_POST['password'], PDO::PARAM_STR);
            $select->execute();
            $result = $select->fetchAll();
            var_dump($result);
    C'est aussi fonctionnel, et peut-être plus recommandé, non ?

  4. #4
    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
    C'est pareil.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [HTML 4.0] Compréhension d'un message d'erreur
    Par Jean-Luc80 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/04/2013, 18h09
  2. Compréhension d'un message d'erreur
    Par rockncaly dans le forum Langage
    Réponses: 17
    Dernier message: 20/01/2012, 10h13
  3. Compréhension d'un message d'erreur sur les WideChar
    Par rivierebruno22 dans le forum Langage
    Réponses: 7
    Dernier message: 16/02/2009, 12h39
  4. Message d'erreur non compréhensible
    Par marsupilami34 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/01/2008, 09h50

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