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 :

Faire une requête préparée sur 2 colonnes ? [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Points : 15
    Points
    15
    Par défaut Faire une requête préparée sur 2 colonnes ?
    Bonjour,

    J'ai besoin de faire une requête préparée mais sur deux colonnes.

    Colonne L et colonne D.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = $connexion->prepare("SELECT l,d,p,s FROM Articles WHERE l LIKE '%".($_POST['l'])."%' AND d LIKE '%".($_POST['d'])."%' Order by d Asc "); 
    $req->execute(array(
       "d" => $d,  
       "l" => $l
    )); 
    while ($data = $req->fetch())
    Ca ne fonctionne pas, je me suis trompé ou ? Aucun message d'erreur.

    Avec une requête sur une colonne ça fonctionne très bien.

    Merci d'avance pour votre aide.

    Débutant.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Bonjour,

    Cela ne ressemble pas à une requête préparé ce que tu fais, une requête préparée ressemble plus à sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $conn->prepare('select * from Articles where nom=:nom');
    req->execute(array(
       "nom" => $tavariable
    ));

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Points : 15
    Points
    15
    Par défaut
    Merci de ta réponse.

    Je veux juste faire une recherche sur deux colonnes. On m'a dit une requête préparée évite les injections.

    Je veux taper banane et que ça recherche banane dans mes deux colonnes.

    Je suis pas un grand spécialiste, et cherche à ce que mon code fonctionne et que je ne sois pas ennuyer niveau sécurité.

    Merci encore pour ton aide.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Niveau sécurité, c'est sur que c'est mieux de faire une requête préparé, il faut aussi faire attention quand tu récupères les valeurs de ton formulaire. Je te conseil d'utiliser la fonction filter_input.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $d=filter_input(INPUT_POST,"d",FILTER_SANITIZE_STRING);
    $l=filter_input(INPUT_POST,"l",FILTER_SANITIZE_STRING);

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Points : 15
    Points
    15
    Par défaut
    Merci mais mais je fais comment pour que ma requête interroge mes deux colonnes : l et d ?

    Si elle est pas préparée dans l'immédiat, c'est pas bien grave, mais je souhaite que ça aille chercher sur mes 2 colonnes.

    J'y suis depuis ce matin, et je trouve pas la solution.

    Merci encore pour ta patience et ton aide.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Points : 15
    Points
    15
    Par défaut
    Merci pour ton explication, ça fonctionne mais j'ai un problème c'est qu'il faut que je rajoute like '%' pour que ça corresponde à mes besoins.

    Je fais comment avec un like '%' ?

    Merci d'avance pour ta réponse. Bonne journée.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    les '%' font partie de la variable :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = $connexion->prepare("SELECT l,d,p,s FROM Articles WHERE l LIKE :L AND d LIKE :D ORDER BY d ASC "); 
    $req->execute(array(
       ':L' => '%'.$_POST['l'].'%',
       ':D' => '%'.$_POST['d'].'%'  
    ));

    N.B. Et contrairement à ce qui t'a été dit, c'est bien une requête préparée : ->prepare(...)

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup ça fonctionne, j'ai compris le truc.

    Bonne journée et encore merci pour ton aide c'est sympa.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Comme le dit jreaux62, il faut intégrer les pourcentages dans la variable.

    Si l'on considère que tu utilises la fonction prepare alors oui c'est bien une requête préparée... par contre, le fait de passer la valeur du POST direct dans la requête fait perdre l'intérêt de la requête preparée, je me suis mal exprimé.

    Je te conseil tout de même l'usage de la fonction filter_input.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je confirme :

    une requête préparée mais mal utilisée, c'est comme un coffre-fort avec une fenêtre ouverte à l'arrière

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Points : 15
    Points
    15
    Par défaut
    Merci de vos conseils, j'utilise bien fonction filter_input.

    Il faut bien que la personne tape ça recherche, vue que c'est pour un petit moteur de recherche dans ma bdd ?

    La personne tape via un champ input et ça lance l'interrogation sur ma bdd. C'est pour ça que j'utilise $_post.

  12. #12
    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
    Le filter_input() ne sert à rien ici.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Points : 15
    Points
    15
    Par défaut
    Ah bon, mon code fonctionne c'est le principal.

    Merci encore de votre aide.

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

Discussions similaires

  1. [WD16] Faire une requête SQL sur une table ?
    Par EriCstoFF dans le forum WinDev
    Réponses: 9
    Dernier message: 01/09/2011, 10h16
  2. [XL-2003] faire une somme que sur les colonnes visibles
    Par mimilll dans le forum Excel
    Réponses: 21
    Dernier message: 27/08/2009, 12h10
  3. faire une somme recursive sur 1 colonne sur 2 dates consecutives et l'afficher
    Par 461219 dans le forum Adaptive Server Enterprise
    Réponses: 12
    Dernier message: 24/11/2008, 16h09
  4. [SimpleXML] comment faire une requête basée sur un namespace d'un attribut ?
    Par hansaplast dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 03/09/2007, 01h18
  5. faire une requête sur plusieurs tables
    Par julien.63 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/08/2006, 22h58

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