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 :

switch imbriqués ou autre ?


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut switch imbriqués ou autre ?
    slt,
    voila je suis sur le dev d'un moteur de recherche immobilier dont voila une partie du 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
     
    if(isset($_POST["typerech"]))
    {
     
    switch($_POST["typerech"]){
    case "vente" : //ton code pour vente
    echo 'ventes';
    $query = "select * from appartement";
    break;
     
    case "location" : //ton code pour location
    echo 'locations';
    $query = "select * from location";
    break;
     
    default : //ton code par défaut
    break;
    }
     
    }
    else
    {
    echo'erreur';
    }
    ce code permet donc de faire une selection entre des ventes et des locations, seulement je dois egalement faire une selection a l'aide de menus déroulants entre le type de bien, son nombre de pièces, sa localisation et son prix.
    Je pense donc imbriquer plusieurs switch a celui ci afin de diriger la recherche entre chaque choix, mais voila je me demande si c'est la meilleure solution,en gros, vais je droit dans le mur?

  2. #2
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Il faut que tu construises ta requête pas à pas

    Démonstration :

    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
     
    if(isset($_POST["typerech"]))
    {
    $query = "select * from ";
    switch($_POST["typerech"]){
    case "vente" : //ton code pour vente
       echo 'ventes';
       $query .= "appartement";
    break;
     
    case "location" : //ton code pour location
    echo 'locations';
    $query .= "location";
    break;
     
    default : //ton code par défaut
    break;
    }
     
    }
    else
    {
    echo'erreur';
    }
     
    switch($tonwhere)
    {
      case 'nb_pieces' : $query .= 'where nb_pieces='.$ton_nb_pieces; break;
      case 'superficie' : $query .= 'where superficie='.$ta_superficie;  break;
    }
    echo $query; // Pour vérifier que tu fais pas nawak
    Avec un truc dans ce genre tu peux construire facilement des requêtes sans avoir à les réécrire 40 fois !

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    ok je te remercie, effectivement c'est plus pratique, je vais tester ça

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    par contre j'aimerai avoir un peu plus d'explication, en fait si je comprend bien $ton_nb_pieces correspond au nom que j'ai assigné au menu déroulant, pour mon exemple c'est nbpieces:
    <select name="nbpieces" class="titrerecherche"style="WIDTH: 188px">

    et de même pour la variable $ta_superficie, c'est ça?
    par contre la variable $tonwhere elle correspond a quoi?
    Je dois la lier à mes variables nbpieces,superficie et les autres pour pouvoir ensuite jouer sur sa valeur non?

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    bon alors voila comme je m'y prend, je ne sais pas si c'est exact mais c'est pour savoir si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    switch($test)
    {
      case 'nbpieces' :
      $query .= 'where NBPIECE='.$ton_nb_pieces;
      break;
     
      case 'type' :
      $query .= 'where TYPE='.$ton_type;
      break;
    }
    j'ai donc nommé test tous mes menus déroulants et je leur ai affecté une valeur unique a savoir nbpieces pour le menu y correspondant et type pour l'autre menu déroulant, de cette façon:
    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
     
    <td> 
    <select name="test" class="titrerecherche" style="WIDTH: 188px" value="type">
    <option value="" selected>Tous types de bien</option> 
    <option value='1'>Appartement</option>
    <option value='2'>Villa</option>
    <option value='3'>Terrain</option>
    <option value='4'>Commerce</option>
    <option value='5'>Garage</option>
    </select>
    </td>
     
    <td> 
    <select name="test" class="titrerecherche"style="WIDTH: 188px" value="nbpieces">
    <option value="0" selected>Indifférent</option> 
    <option value="1">Studio</option> 
    <option value="2">2 pi&egrave;ces</option> 
    <option value="3">3 pi&egrave;ces</option> 
    <option value="4">4 pi&egrave;ces</option> 
    <option value="5">5 pi&egrave;ces</option> 
    <option value="6">6 pi&egrave;ces</option> 
    <option value="7">7 pi&egrave;ces</option>
    </select>
    </td>
    Reste les deux variables $ton_nb_pieces et $ton_type.
    comment je dois donc faire pour que ces variable prennent les valeurs de ce que je leur ai affecté lors de la selection dans le menu déroulant?
    merci

  6. #6
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    <select name="mon_formulaire"

    Il te faut nommer tes 2 selects différemment

    ensuite pour récupérer leur valeur il te suffira de submit ton formulaire et d'accéder aux variables par $_POST["mon_formulaire"]

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    ok je vois par contre je ne sais pas comment associer les variables "$ton_nb_pieces" et "$ton_type" a l'option value de chaque categorie, il faudrait que je puisse recuperer la valeur de l'option value correspondant chacun a un nombre de pieces et ensuite l'affecter a une variable, dans ce cas "$ton_nb_pieces" pour qu'ensuite lors de la requete le resultat affiché depende de la valeur de cette variable, mais je vois pas comment lui affcter la valeur de l'option value selectionné, tu pourrais m'expliquer?
    en tout cas jte remercie deja pour l'aide que tu m'as fourni.

  8. #8
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ton_nb_pieces = $_POST["ta_liste_deroulante_du_nb_de_pieces"]
    EDIT : je viens de relire ce que j'ai mis hier soir tard ce n'était pas mon_formulaire mais bien la liste déroulante qu'il fallait comprendre

  9. #9
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Salut,

    Petite remarque :
    Pourquoi traites-tu les ventes et les locations dans 2 tables séparées ? Sont-ils si différents que ça ? Je crois que tu t'embetes pour rien là.

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par guitou12
    [CODE]
    EDIT : je viens de relire ce que j'ai mis hier soir tard ce n'était pas mon_formulaire mais bien la liste déroulante qu'il fallait comprendre
    comme ceci?
    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
     
    switch($_POST["type"])
    {
     
      case '1' :
      $query .= 'where TYPE='."APPARTEMENT";
      break;
     
      case '2' :
      $query .= 'where TYPE='."TERRAIN";
      break;
     
      case '3' :
      $query .= 'where TYPE='."COMMERCE";
      break;
     
    }
     
    switch($_POST["nbpieces"])
    {
     
      case '1' :
      $query .= 'where NBPIECE='."1";
      break;
     
      case '2' :
      $query .= 'where NBPIECE='."2";
      break;
     
      case '3' :
      $query .= 'where NBPIECE='."3";
      break;
     
    }

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par NoT
    Salut,

    Petite remarque :
    Pourquoi traites-tu les ventes et les locations dans 2 tables séparées ? Sont-ils si différents que ça ? Je crois que tu t'embetes pour rien là.
    J'ai préféré tout séparer enfin de traiter les choses indépendemment les unes des autres quitte a m'embeter(ce que je suis en train de faire d'ailleurs )

  12. #12
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    pour être plus concret et vous montrer comment est construit ma page result.php voicil'adresse
    j'ai donc créé un switch pour chaque liste déroulante auquel j'ai affecté en variable le nom de chacune des liste correspondant.
    j'ai ensuite créé un case pour chaque option value, par exemple pour la liste type, il y a 5 case avec comme valeur 1 pour appartement, 2 pour villa et ansi de suite.
    Le moteur de recherche possède 5 listes déroulantes, je dois donc associer chacune des requêtes attribuées a chacune des liste entre elles, pour cela effectivement il faudrai utiliser la valeur AND entre chaque requêtes, seulement voila mon problème:
    si je souhaite faire une recherche indépendemment de chaque liste, le fait d'avoir lier chacune des requêtes en insérant un AND a l'une et l'autre, cela risque de poser un problème de syntaxe, dans ce cas la je n'arrive pas à voir comment faire le choix d'utiliser la valeur AND dynamiquement

  13. #13
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Fait comme ça

    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
     
    $query = 'SELECT * FROM ta_table WHERE 1=1';
    switch($_POST["type"])
    {
     
      case '1' :
      $query .= 'AND TYPE='."APPARTEMENT";
      break;
     
      case '2' :
      $query .= 'AND TYPE='."TERRAIN";
      break;
     
      case '3' :
      $query .= 'AND TYPE='."COMMERCE";
      break;
     
    }
     
    switch($_POST["nbpieces"])
    {
     
      case '1' :
      $query .= 'AND NBPIECE='."1";
      break;
     
      case '2' :
      $query .= 'AND NBPIECE='."2";
      break;
     
      case '3' :
      $query .= 'AND NBPIECE='."3";
      break;
     
    }
    Comme ça même si tu ne passes dans aucun de tes switchs ta requête sera bien valide !

  14. #14
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    ah yes bien vu!, merci encore je test ça(attendez les modos, cette affaire est loin d'être résolu lol)

  15. #15
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 153
    Points : 56
    Points
    56
    Par défaut
    en fait j'ai fais quelques modifs, voila mon code au complet, manque juste quelques option value :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    <?php
     
    @ $db = new mysqli('localhost', 'user', 'mdp', 'base_dlv');
     
      if (mysqli_connect_errno()) 
      {
         echo 'Error: Could not connect to database.  Please try again later.';
         exit;
      }
     
    if(isset($_POST["typerech"]))
    {
     
    $query = "select * from ";
     
    switch($_POST["typerech"]){
     
      case "vente" :
      echo 'ventes<br>';
      $query .= "vente";
      break;
     
      case "location" :
      echo 'locations<br>';
      $query .= "location";
      break;
     
      default :
      break;
    }
     
    }
    else
    {
       echo'erreur';
    }
     
    $query .= ' WHERE 1=1';
     
    switch($_POST["type_de_bien"])
    {
     
      case '1' :
      $query .= ' AND TYPE='."APPARTEMENT";
      break;
     
      case '2' :
      $query .= ' AND TYPE='."VILLA";
      break;
     
      case '3' :
      $query .= ' AND TYPE='."TERRAIN";
      break;
     
      case '4' :
      $query .= ' AND TYPE='."COMMERCE";
      break;
     
      case '5' :
      $query .= ' AND TYPE='."GARAGE";
      break;
     
    }
     
    switch($_POST["nbpieces"])
    {
     
      case '1' :
      $query .= ' AND NBPIECE='."1";
      break;
     
      case '2' :
      $query .= ' AND NBPIECE='."2";
      break;
     
      case '3' :
      $query .= ' AND NBPIECE='."3";
      break;
     
    }
     
    switch($_POST["ville"])
    {
     
      case '1' :
      $query .= ' AND VILLE='."BANDOL";
      break;
     
      case '2' :
      $query .= ' AND VILLE='."CARQUEIRANNE";
      break;
     
      case '3' :
      $query .= ' AND VILLE='."LA CRAU";
      break;
     
    }
     
    echo $query;
     
       $result = $db->query($query); 
       $num_results = $result->num_rows;
     
     switch($_POST["typerech"]){
     
      case "vente" :
      echo '<p>Nombre de ventes: '.$num_results.'</p>';
      break;
     
      case "location" :
      echo'<p>Nombre de locations: '.$num_results.'</p>';
      break;
     
      default : //ton code par défaut
      break;
    }
     
      for ($i=0; $i <$num_results; $i++)
      {
         $row = $result->fetch_assoc();
         //echo '<p><strong>'.($i+1).'. Prix: ';
    	 echo '<p><strong><br />Prix: ';
         echo htmlspecialchars(stripslashes($row['PRIX']));
         echo '</strong><br />Type: ';
         echo stripslashes($row['TYPE']);
    	 echo '</strong><br />Superficie: ';
         echo stripslashes($row['SUPERFICIE']);
         echo '<br />Ville: ';
         echo stripslashes($row['VILLE']);
         echo '<br />Référence: ';
         echo stripslashes($row['REF_APPART']);
         echo '</p>';
      }
     
    ?>
    j'ai donc concaténé la requete de cette façon, par rapport a celle que tu m'a donné je l'ai juste disposé d'une autre façon car il fallait que je prenne en compte le switch de départ, celui qui se faisait en fonction du type de recherche, vente ou location, seulement voila la selection sur le type de bien ne marche pas, il m'indique toutes les ventes quand je selectionne vente pour typerech et appartement pour type_de_bien, j'ai pourtant une colonne type dans ma table vente a laquelle j'ai affecté trois valeurs, deux appartements et une villa, j'aurai dû n'obtenir que deux reponses hors j'ai les trois qui ressortent
    Le MCD de ma base doit être foireux aussi même si pour l'instant ça ne devrait pas poser de problème

Discussions similaires

  1. une histoire de switch imbriqués
    Par Invité dans le forum Débuter
    Réponses: 10
    Dernier message: 17/09/2009, 11h05
  2. Switch imbriqués
    Par babou54 dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2009, 17h13
  3. [AS3] Autre méthode pour switch imbriqués ?
    Par 187bundy dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 15/02/2009, 15h35
  4. Réponses: 8
    Dernier message: 12/11/2007, 14h46
  5. [XSLT]for-each imbriqués, et autres galères...
    Par Sarrus dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/03/2006, 17h57

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