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 :

[SQL] Problème construction requête SQL - PHP


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Points : 10
    Points
    10
    Par défaut [SQL] Problème construction requête SQL - PHP
    Bonjour à tous,
    Voilà j'ai un petit soucis pour développer mon application, j'ai un formulaire permettant à l'utilisateur d'effectuer une recherche avec différentes listes déroulantes.

    Le problème est le suivant :
    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
    45
    46
    47
    48
    49
    <?php
    $ch_commu = $_POST['commune'];
    $instru = $_POST['instructeur'];
    $numord= $_POST['no_ord'];
    $perm = $_POST['permis'];
     
    if (!empty($ch_commu))
    {
    $param1 = "Commune = '" .$ch_commu. "'";
    }
    else
    {
    $param1 = "";
    }
     
    if (!empty($instru))
    {
    $param2 = "Instructeur = '" .$instru. "'";
    }
    else 
    {
    $param2 = "";
    }
    if (!empty($numord))
    {
    $param3 = "Ordre_du_jour = '" .$numord. "'";
    }
    else
    {
    $param3 = "";
    }
    if (!empty($perm))
    {
    $param4 = "N_permis = '" .$perm. "'";
    }
    else
    {
    $param4 = "";
    }
     
     
    $option = "$param1 AND $param2 AND $param3 AND $param4";
    echo $option;
    $consul = mysql_query(" SELECT * FROM t_dossiers WHERE '".$option."'");
    $resconsul = mysql_fetch_array($consul);
     
    echo "</br> SELECT * FROM t_dossiers WHERE '".$option."'";
     
    ?>
    je teste ce que l'utilisateur a choisit dans la liste déroulante ou si il n'a rien séléctionner mais si il ne sélectionne rien/1choix/2choix/3choix le AND de ma requête SQL apparait toujours.
    Ma requête est valide que si il choisit une valeur à chaque liste déroulante.

    Je ne sais pas comment faire pour construire ma requete.

    Merci d'avance.

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Normal, car quand certains paramètres sont vides ca donne une requete de ce style :

    SELECT * FROM matable WHERE AND AND AND; donc ca n'est pas valide.

    Il faudrait plutot construire ta requete au fur et a mesure :

    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
    $req = "SELECT * FROM matable ";
    $condition = " WHERE "; // attention aux espaces, et la premiere condition est where
     
    // si premier param selectionné
    if(isset($param1) )
    {
    $req .= $condition . " param1 = '" . $param1 . "' ";
    $conditition = " AND " ; // mnt on aura un AND
    }
     
    // si premier param selectionné
    if(isset($param2) )
    {
    $req .= $condition . " param2 = '" . $param2 . "' ";
    $conditition = " AND " ; // mnt on aura un AND
    }
    //etc...

  3. #3
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $option = "$param1 AND $param2 AND $param3 AND $param4";
    Ici, il te suffit de tester si un param est vide avant de l'ajouter à la requete :

    Par exemple :
    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
     
    $option = $param1;
     
    if ($option != "")
    {
      if ($param2 != "") $option = $option." AND ".$param2;
    }
    else
    {
      $option = $param2;
    }
     
     
    if ($option != "")
    {
      if ($param3 != "") $option = $option." AND ".$param3;
    }
    else
    {
      $option = $param3;
    }
     
     
    if ($option != "")
    {
      if ($param4 != "") $option = $option." AND ".$param4;
    }
    else
    {
      $option = $param4;
    }
    EDIT : Flûte ! grillé !

    Ben comme ça, t'auras 2 exemples...

    3 exemples... décidemment, y'en a qu'on de la chance !

  4. #4
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Ce que tu peux faire c'est au lieu de faire
    faire
    pour les 4 paramètres
    Comme ça tu aura des 1 dans les paramètre vide (ce qui correspont au boolean true).
    C'est pas forcement le plus propre mais ça devrait marcher

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    guigui5931 :

    J'avais jamais pensé à ça... je trouve que c'est la solution la plus maline et celle qui fait le code le plus petit, donc le plus clair... bien vu !

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Merci à tous ça marche

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

Discussions similaires

  1. [SQL] problème avec requête sql
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/05/2007, 11h58
  2. [SQL] problème de requête sql d'insertion
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 10/05/2007, 14h11
  3. [SQL] Problème de requête SQL
    Par nico26 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2007, 16h40
  4. [SQL] Problème de requête SQL
    Par Invité dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/09/2006, 15h18
  5. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07

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