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 :

Select list multicritères [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut Select list multicritères
    Bonjour à tous.

    Voilà, je développe un mini moteur de recherche à choix multiples... où pas...
    Je m'explique : j'ai 3 listes déroulantes. chacune d'entre elle peut être choisie indépendamment ou seulement deux d'entre elles ou les 3... et aller chercher dans une table, la correspondance...
    Le problème c'est que je n'arrive pas à exécuter la requête Sql qui trie les données ?

    ça, c'est le formulaire :
    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
    <form id="form1" name="form1" method="post" action="">
      <p>
        <select name="type_motorisation" size="1" class="form_page" id="type_motorisation">
          <option value="">Choisissez la motorisation</option>
     
          <option value="tous_moteurs">toutes les motorisations</option>
          <option value="Diesel">Diesel</option>
          <option value="Essence">Essence</option>
          <option value="GPL">GPL</option>
          <option value="Hybride">Hybride</option>
              </select>
     
        <br /><br />
     
     
        <select name="marque" size="1" class="form_page" id="marque">
          <option value="">Choisissez la marque</option>
          <option value="toutes_marques">Toutes marques</option>
          <option value="BMW">BMW</option>
          <option value="Citroen">Citroen</option>
          <option value="Dacia">Dacia</option>
     
          <option value="Fiat">Fiat</option>
          <option value="Ford">Ford</option>
          <option value="Nissan">Nissan</option>
          <option value="Opel">Opel</option>
          <option value="Peugeot">Peugeot</option>
          <option value="Renault">Renault</option>
     
          <option value="Seat">Seat</option>
          <option value="Toyota">Toyota</option>
              </select>
        <br /><br />
     
     
        <select name="prix" size="1" class="form_page" id="prix">
          <option selected="selected">Choisissez le prix</option>
          <option value="tous_tarif">Tous les prix</option>
     
          <option value="t1">≤ 10 000 €</option>
          <option value="t2">10 000 € - 15 000 €</option>
          <option value="t3">&gt; 15 000 €</option>
        </select>
    la requete doit être construite dans ce genre là :
    recherche dans la table "voiture" les champs correspondants aux différent . si le est vide alors cherche toutes les marques. si le champs est vide alors cherche tous les prix, etc... et évidement, si les sont tous remplis, que ça me renvoi l'addition de tous les critères...

    Je pense que pour les chevronnés qui se trouvent sur le forum, c'est du déjà vue, mais moi, au delà de 2 critères... je n'y arrive plus.... Quelqu'un a-t-il une idée du type de requête que je dois utiliser ?

    Merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    C'est au niveau du traitement des donnees recupérées que ca se passe :
    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
    <?php
    $clause_where = '';
    $is_where = 0;
     
    // motorisation
    if( isset($_POST['type_motorisation']) && $_POST['type_motorisation']!='' && $_POST['type_motorisation']!='tous_moteurs' ) {
    	$clause_where .= ($is_where == 0)? " WHERE " : " AND ";
    	$clause_where .= " motorisation = '".mysql_real_escape_string($_POST['type_motorisation'])."' ";
    	$is_where = 1;
    }
     
    // marque
    if( isset($_POST['marque']) && $_POST['marque']!='' && $_POST['marque']!='toutes_marques' ) {
    	$clause_where .= ($is_where == 0)? " WHERE " : " AND ";
    	$clause_where .= " marque = '".mysql_real_escape_string($_POST['marque'])."' ";
    	$is_where = 1;
    }
     
    // prix
    if( isset($_POST['prix']) && $_POST['prix']!='' && $_POST['prix']!='tous_tarif' ) {
    	$clause_where .= ($is_where == 0)? " WHERE " : " AND ";
    	$clause_where .= " prix = '".mysql_real_escape_string($_POST['prix'])."' ";
    	$is_where = 1;
    }
     
    // requete
    $query = "SELECT * FROM matable ".$clause_where.";";
    $result = mysql_query($query) or die('Erreur SQL :<br />'.$query.'<br />'.mysql_error());
    $nombre = mysql_num_rows($result);
    // ...
    ?>
    Dernière modification par Invité ; 07/07/2011 à 15h41.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut
    Merci, je regarde dans l'après midi car je dois partir en RDV... Je vous tiens au courant dans la soirée...

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut
    J'ai essayé avant de partir en l'adaptant à mon code... mais ça ne fonctionne pas....
    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    <?php require_once('Connections/bdn.php'); ?>
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
     
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
     
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    }
     
    mysql_select_db($database_bdn, $bdn);
    $query_base_motorisation = "SELECT * FROM motorisation ORDER BY type_moteur ASC";
    $base_motorisation = mysql_query($query_base_motorisation, $bdn) or die(mysql_error());
    $row_base_motorisation = mysql_fetch_assoc($base_motorisation);
    $totalRows_base_motorisation = mysql_num_rows($base_motorisation);
     
    mysql_select_db($database_bdn, $bdn);
    $query_base_marque = "SELECT * FROM marque ORDER BY marque ASC";
    $base_marque = mysql_query($query_base_marque, $bdn) or die(mysql_error());
    $row_base_marque = mysql_fetch_assoc($base_marque);
    $totalRows_base_marque = mysql_num_rows($base_marque);
     
     
     
     
     
    $clause_where = '';
    $is_where = 0;
     
    // motorisation
    if( isset($_POST['type_motorisation']) && $_POST['type_motorisation']!='' && $_POST['type_motorisation']!='tous_moteurs' ) {
    	$clause_where .= ($is_where == 0)? " WHERE " : " AND ";
    	$clause_where .= " type_motorisation = '".mysql_real_escape_string($_POST['type_motorisation'])."' ";
    	$is_where = 1;
    }
     
    // marque
    if( isset($_POST['marque']) && $_POST['marque']!='' && $_POST['marque']!='toutes_marques' ) {
    	$clause_where .= ($is_where == 0)? " WHERE " : " AND ";
    	$clause_where .= " marque = '".mysql_real_escape_string($_POST['marque'])."' ";
    	$is_where = 1;
    }
     
    // prix
    if( isset($_POST['prix']) && $_POST['prix']!='' && $_POST['prix']!='tous_tarif' ) {
    	$clause_where .= ($is_where == 0)? " WHERE " : " AND ";
    	$clause_where .= " prix = '".mysql_real_escape_string($_POST['prix'])."' ";
    	$is_where = 1;
    }
     
    // requete
    mysql_select_db($database_bdn, $bdn);
    $query_resultat_voiture = "SELECT * FROM voiture ".$clause_where.";";
    $resultat_voiture = mysql_query($query_resultat_voiture, $bdn) or die(mysql_error());
    $row_resultat_voiture = mysql_fetch_assoc($resultat_voiture);
    $totalRows_resultat_voiture = mysql_num_rows($resultat_voiture);
     
    // ...
     
    $editFormAction = $_SERVER['PHP_SELF'];
     
    ?>
     
    <h2><img src="images/citroen_titre_droit.png" width="18" height="17" hspace="5" border="0" align="absmiddle" />Nos véhicules</h2>
    <br />
    <form id="form1" name="form1" method="post" action="v2.php">
      <p>
        <select name="type_motorisation" size="1" class="form_page" id="type_motorisation">
          <option value="">Choisissez la motorisation</option>
          <option value="tous_moteurs">toutes les motorisations</option>
          <?php
    do {  
    ?>
          <option value="<?php echo $row_base_motorisation['type_moteur']?>"><?php echo $row_base_motorisation['type_moteur']?></option>
          <?php
    } while ($row_base_motorisation = mysql_fetch_assoc($base_motorisation));
      $rows = mysql_num_rows($base_motorisation);
      if($rows > 0) {
          mysql_data_seek($base_motorisation, 0);
    	  $row_base_motorisation = mysql_fetch_assoc($base_motorisation);
      }
    ?>
        </select>
        <br />
        <br />
        <select name="marque" size="1" class="form_page" id="marque">
          <option value="">Choisissez la marque</option>
          <option value="toutes_marques">Toutes marques</option>
          <?php
    do {  
    ?>
          <option value="<?php echo $row_base_marque['marque']?>"><?php echo $row_base_marque['marque']?></option>
          <?php
    } while ($row_base_marque = mysql_fetch_assoc($base_marque));
      $rows = mysql_num_rows($base_marque);
      if($rows > 0) {
          mysql_data_seek($base_marque, 0);
    	  $row_base_marque = mysql_fetch_assoc($base_marque);
      }
    ?>
        </select>
        <br />
        <br />
        <select name="prix" size="1" class="form_page" id="prix">
          <option selected="selected">Choisissez le prix</option>
          <option value="tous_tarif">Tous les prix</option>
          <option value="t1">≤ 10 000 €</option>
          <option value="t2">10 000 € - 15 000 €</option>
          <option value="t3">&gt; 15 000 €</option>
        </select>
      </p>
      <p align="right">
        <input name="Voir les offres" type="submit" class="bouton" value="Voir les offres" />
      </p>
    </form>
    <p><br />
    </p>
    <?php do { ?>
    <div>
      <p><?php echo $row_resultat_voiture['marque']; ?></p>
      <p><?php echo $row_resultat_voiture['modele']; ?></p>
      <p><?php echo $row_resultat_voiture['motorisation']; ?></p>
      <p><?php echo $row_resultat_voiture['photo']; ?></p>
      ------------------------------------------------------------------ </div>
    <?php } while ($row_resultat_voiture = mysql_fetch_assoc($resultat_voiture)); ?>
    <?php
    mysql_free_result($base_motorisation);
     
    mysql_free_result($base_marque);
     
    mysql_free_result($resultat_voiture);
    ?>
    Exemple : lorsque je sélectionne une marque, il me met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unknown column 'type_motorisation' in 'where clause'
    J'avoue essayer de comprendre la requête... mais sans trop y parvenir... Merci quand même de ton aide...

  5. #5
    Invité
    Invité(e)
    Par défaut
    il faut adapter aux champs de ta BD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$clause_where .= " motorisation = '".mysql_real_escape_string($_POST['type_motorisation'])."' ";

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut
    C'est génial !!!!
    Merci pour ton aide. Il me reste un problème de casse à résoudre, mais ça, je devrais pouvoir y arriver !

    Merci encore !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/07/2009, 21h41
  2. [HTML] select liste avec decalages des entrees
    Par guy2004 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 19/05/2006, 15h10
  3. selection liste deroulante
    Par flydragon dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2006, 15h32
  4. [JSP/STRUTS] pré-selection liste déroulante
    Par Zxyankxya dans le forum Struts 1
    Réponses: 7
    Dernier message: 20/01/2006, 15h14
  5. Hauteur SELECT (liste déroulante ?
    Par jaggy19 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/08/2005, 15h19

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