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 avec 2 requetes pour 1 même tableau [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut problème avec 2 requetes pour 1 même tableau
    Bonjour,
    J'ai 2 tables reliées par une clé :
    Table USER dont clé primaire est "iduser".
    Table COURS dont clé etrangere est "userid"
    ==> donc iduser = userid
    Je selectionne tous les cours et les affiches avec une boucle sous forme d'un tableau.
    Mais dans ce tableau je voudrai inserer une cellule affichant le "username" pris dans la table USER qui correspond à l'userid de la table COURS mais j'arrive pas à le faire !
    Voici mes requetes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $story_sql = "select * from cours
                    where page = '".$pages['code']."'
                    and published is not null
                    order by published desc";
    				$story_result = mysql_query($story_sql, $conn);
      if (mysql_num_rows($story_result)) {
    $story_sql = "select * from cours
                    where page = '".$pages['code']."'
                    and published is not null
                    order by published desc";
    				$story_result = mysql_query($story_sql, $conn);
      if (mysql_num_rows($story_result)) {
    ...affichage du tableau
    Pour ma requete suivante concernant les noms :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result="select username from user where iduser = .'$story[userid]'";
    a partir de là je bloque !
    Merci à ceux qui m'aideront :-)

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 76
    Points
    76
    Par défaut Re: problème avec 2 requetes pour 1 même tableau
    Une proposition avec une jointure sur les deux tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $story_sql = "select cours.*, user.username 
       from cours 
          left join user on (user.iduser = cours.userid)
       where page = '".$pages['code']."'
                    and published is not null
                    order by published desc";
    $story_result = mysql_query($story_sql, $conn);
    Et puis que je suis un maniaque je dirais même : les doubles quotes sont ici inutile, et pour éviter les problèmes d'injection SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $story_sql = 'select cours.*, user.username 
       from cours 
          left join user on (user.iduser = cours.userid)
       where page = "'. str_replace('"', '\"', $pages['code']) .'"
                    and published is not null
                    order by published desc';
    $story_result = mysql_query($story_sql, $conn);

  3. #3
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    Je te remercie the_jeck c'est exactement ce que je voualis, j'ai encore des soucis avec les jointures mais ca va finir par rentrer.
    Dis moi stp c'est quoi cette manip qui doit eviter le sql injection ?

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 76
    Points
    76
    Par défaut
    en fait, lorsque tu mets une variable dans une chaine qui devient une requete SQL... il faut éviter que cette variable puisse contenir un code qui va modifier le comportement de ta quete...

    par exemple dans ton cas si j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pages['code'] = 'tutu"; select * from user;';
    ta quete SQL risque de ressembler à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select cours.*, user.username from cours left join user on (user.iduser = cours.userid) where page = "tutu"; select * from user; "...
    on se retrouve avec plusieurs requetes concécutives... dont une qui vient d'une variable (par exemple un champ input ?)

    avec le str_replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select cours.*, user.username from cours left join user on (user.iduser = cours.userid) where page = "tutu\"; select * from user; "...
    la requete injectée se retrouve traitée comme une simple chaine de caractère, la requète d'origine ne renverra sans doute aucun enregistrement, mais rien de plus.

    Voilà le principe ;-)

  5. #5
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    ok merci !

  6. #6
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    8) Salut,

    juste une petite remarque en passant tu peut utiliser la fonction addslashes() (et sa copine stripslashes() ) pour s'assurer contre l'injection sql. C'est plus simple que str_replace() , isnt'it ?

    bon dev'
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  7. #7
    Membre averti Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Points : 377
    Points
    377
    Par défaut
    oui !

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par tigunn
    8) Salut,

    juste une petite remarque en passant tu peut utiliser la fonction addslashes() (et sa copine stripslashes() ) pour s'assurer contre l'injection sql. C'est plus simple que str_replace() , isnt'it ?

    bon dev'
    +1 sachant que pour mysql ca ne suffira pas car il reste les caractères à slasher :
    http://us2.php.net/manual/fr/function.mysql-real-escape-string.php

  9. #9
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 76
    Points
    76
    Par défaut
    Ah tien, je ne la connaissais pas cette fonction !! merci beaucoup !! ca va en aider plus d'un par ici ;-)

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

Discussions similaires

  1. [MySQL] problème avec deux requetes dans un même script
    Par leclone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/02/2007, 10h28
  2. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22
  3. [debutant]Problème avec une requete ....
    Par MichMich29 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/07/2005, 17h19
  4. problème avec ma requete contenant un "in" :
    Par seb78000 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/07/2005, 16h38
  5. [tomcat] [jsp] Problème avec driver OCI pour oracle
    Par nanardcompanie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/07/2004, 09h54

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