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 :

Problème "simple" en PDO (affichage d'une requete)..


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Problème "simple" en PDO (affichage d'une requete)..
    Salut! à tous

    Je suis novice en PHP et MySQL (PDO donc..) et souhaiterais donner l'accès aux admins de mon site à la page administration.php ..
    Je me suis inspiré d'un tutoriel PHP, pour faire ma requete et ma comparaison, mais ca ne fonctionne pas..
    Etant novice, j'ai testé des petits echo partout, pour voir le contenu des variables, et je ne semble pas pouvoir afficher le contenu de ma bdd..

    J'ai donc testé un select * , et afficher tout, ça fonctionne..
    Je vous mets ci-dessous une copie du code actuel :

    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 
    include("./includes/DBconnect.php");
     
    $query=$db->prepare('SELECT * FROM users WHERE login-user =:pseudo');
    $query->bindValue(':pseudo',$_POST['login'], PDO::PARAM_STR);
    $query->execute();
    $data=$query->fetch();	
    echo '1:'.$_POST['login']; // ca fonctionne, ca reprend bien mon login ADMIN rentré dans le formulaire de l'index.php
    echo '2:'.$data['pw-user']; // ca n'affiche rien, il semble etre vide
    if ($data['pw-user'] == md5($_POST['pass'])) // Acces OK !
    {
    $_SESSION['pseudo'] = $data['login-user'];
    $_SESSION['id'] = 1;
    header("Location: administration.php");
    }
    else // Acces pas OK !
    {
    echo "pas ok";
    }
    $query->CloseCursor();
     
    ?>
    Chaque fois, il passe donc dans la deuxième branche du IF...

    Merci

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Fais voir la structure de ta table (DESC `tablename`)

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Essaies avec ce code :
    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
    <?php
    $inc = include("./includes/DBconnect.php");
     
    if (false === $inc) {
       exit('err on include');
    }
     
    $stmt = $db->prepare('SELECT * FROM users WHERE login-user = :pseudo');
    if (false === $stmt) {
       exit('err on prepare');
    }
     
    $bind = $stmt->bindValue(':pseudo', $_POST['login'], PDO::PARAM_STR);
    if (false === $bind) {
       exit('err on bind');
    }
     
    try {
       $exec = $stmt->execute();
       if (false === $exec) {
          exit('err on exec');
       }
     
       $data = $stmt->fetch(PDO::FETCH_ASSOC);
       echo '<pre>', 'user : ', $data['longin-user'], '<br />', 'pwd : ', $data['pw-user'], '<br />';
       echo 'postPwd : ', $_POST['pass'], ' - md5 : ', md5($_POST['pass']);
    }
    catch (PDOException $e) {
       exit($e->getMessage());
    }
     
    ?>

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voila

    Table users :
    id-user int(11)
    login-user varchar(40)
    pw-user varchar(40)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonjour,

    Essaies avec ce code :
    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
    <?php
    $inc = include("./includes/DBconnect.php");
     
    if (false === $inc) {
       exit('err on include');
    }
     
    $stmt = $db->prepare('SELECT * FROM users WHERE login-user = :pseudo');
    if (false === $stmt) {
       exit('err on prepare');
    }
     
    $bind = $stmt->bindValue(':pseudo', $_POST['login'], PDO::PARAM_STR);
    if (false === $bind) {
       exit('err on bind');
    }
     
    try {
       $exec = $stmt->execute();
       if (false === $exec) {
          exit('err on exec');
       }
     
       $data = $stmt->fetch(PDO::FETCH_ASSOC);
       echo '<pre>', 'user : ', $data['longin-user'], '<br />', 'pwd : ', $data['pw-user'], '<br />';
       echo 'postPwd : ', $_POST['pass'], ' - md5 : ', md5($_POST['pass']);
    }
    catch (PDOException $e) {
       exit($e->getMessage());
    }
     
    ?>
    Salut, et merci beaucoup pour ton temps.
    Malheureusement, ca ne fonctionne pas, ca ne me poste dans tous les cas que "err on exec"

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bon c'est simple, tu ne dois pas utiliser le tiret dans le nom des champs.
    Remplace par le tiret-bas : login-user => login_user

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ca marche!
    Franchement, un grand merci

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Meuh si qu'on peut utiliser le tiret, il faut juste penser à échaper le nom du champ dans la requête car a-b est interprété par mysql comme une soustraction

    Voici comment tu dois utiliser l'échapement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `une-colonne` FROM `une-database`.`une-table` WHERE `un-colone` IN (SELECT `autre-chose` FROM `une-autre-table`)

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Meuh si qu'on peut utiliser le tiret, il faut juste penser à échaper le nom du champ dans la requête car a-b est interprété par mysql comme une soustraction
    Bon là je ne pense pas que cela soit très judicieux comme recommandation. Dans les bonnes pratiques, il est clairement déconseillé d'utiliser le tiret dans le nommage des champs, tables ou autre élément.
    Bref, comme souvent c'est possible mais pas recommandé.

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    A ce compte là il faut aussi lui expliquer que SELECT * c'est mal

    Enfin, ce point sur l'échappement me parait nécessaire car on est obligé de l'utiliser pour des colonne avec des noms comme count ou name (mot clés réservés par MySQL).

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Et bien il suffit de nommer correctement les objets de la BDD :
    - pas de mots réservés du SQL ;
    - pas de caractères problématiques, c'est à dire pas d'accents, de caractères diacritiques, de tirets, d'espaces, de signes de ponctuation.

    Bref, rien que des lettres, éventuellement des chiffres et le caractère de soulignement.

Discussions similaires

  1. [MySQL] Problème de simple quote dans le champ de recherche
    Par mesken dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 29/03/2012, 10h05
  2. [PHP 5.2] Probléme échappement simple quote
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 19/04/2011, 15h08
  3. [MySQL] Problème de simples quotes
    Par LN69 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/05/2008, 12h02

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