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

jQuery Discussion :

formulaire de recherche , filtrage des données


Sujet :

jQuery

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut formulaire de recherche , filtrage des données
    J'ai réalisé un formulaire de recherche pour ma base de donnée en se basant sur un formulaire sur le site developpez.com. l'affichage marche trop bien mais quand je choisis une donnée spécifique ça me filtre pas mon tableau avez vous des idées

    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
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
    <html> 
    <head> 
       <meta http-equiv="Cache-Control" content="no-cache"> 
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
       <title>Recherche</title> 
     
      <link rel="stylesheet" href="../Parc_Transformateur.css" />
      <?php include_once("menu_admin.php");?>
       <script type="application/javascript" charset="utf-8" src="http://code.jquery.com/jquery-1.6.3.min.js"></script> 
       <script type="application/javascript"> 
          function filterLists() { 
             // ici on récupère les valeurs sélectionnées pour chaque liste avec les sélecteurs de jQuery 
             var identifiant    = $('#identifiant option:selected').val(); 
             var type    = $('#type option:selected').val(); 
    		 var puissance    = $('#puissance option:selected').val(); 
    		 var qtite_huile    = $('#qtite_huile option:selected').val(); 
    		 var valeur    = $('#valeur option:selected').val(); 
    		 var fusible    = $('#fusible option:selected').val(); 
             var nom   = $('#nom option:selected').val(); 
             var gdo   = $('#gdo option:selected').val(); 
             var date = $('#date option:selected').val(); 
    		 var choix = $('#choix option:selected').val(); 
             // on fait notre appel ajax paramétré (pas besoin de s'occuper de l'implémentation du XMLHttpRequest, jQuery le fait pour toi) 
             $.ajax({ 
                type: 'POST',   // méthode de transmission des données 
                url: 'filterLists.php',   // script à exécuter sur le serveur 
                data: 'identifiant='+identifiant+'&type='+type+'&puissance='+puissance+'&qtite_huile='+qtite_huile+'&valeur='+valeur,+'&fusible='+fusible,+'&nom='+nom,+'&gdo='+gdo,+'&date='+date,+'&choix='+choix,  // données à passer au script via le tableau $_POST 
                dataType: 'xml',   // type des données attendues en retour : ici xml 
                cache: false, 
                success: function(response) {   // traitement du résultat (= données reçues du serveur) une fois l'appel ajax réussi 
                   var code; 
                   // vu que la réponse est au format xml, on demande à jquery de trouver des noeuds spécifiques 
                   // et si ces noeuds contiennent des données alors on remplace les données des listes liées par celles renvoyées par le serveur 
                   // en clair : on remplace si nécessaire l'ensemble des lignes <option value=""></option> pour chaque liste qui n'a pas encore de sélection 
                   if ((code = $(response).find('identifiant').text()).length)    $('#identifiant').html(code); 
                   if ((code = $(response).find('type').text()).length)     $('#type').html(code); 
    			   if ((code = $(response).find('puissance').text()).length)     $('#puissance').html(code);
    			   if ((code = $(response).find('qtite_huile').text()).length)     $('#qtite_huile').html(code);
    			   if ((code = $(response).find('valeur').text()).length)     $('#valeur').html(code); 
    			   if ((code = $(response).find('fusible').text()).length)     $('#fusible').html(code); 
    			   if ((code = $(response).find('nom').text()).length)   $('#nom').html(code); 
                   if ((code = $(response).find('gdo').text()).length)   $('#gdo').html(code); 
                   if ((code = $(response).find('nom').text()).length)   $('#nom').html(code); 
                   if ((code = $(response).find('date').text()).length) $('#date').html(code); 
    			   if ((code = $(response).find('choix').text()).length)   $('#choix').html(code); 
                   if ((code = $(response).find('table').text()).length)    $('#table').html(code); 
                } 
             }); 
          } 
       </script> 
       <style type="text/css"> 
          body { font-family: "arial"; } 
          table { width: 600px;;} 
          table, tr, th, td { border: 1px solid black; border-collapse: collapse; padding: 4px;} 
          .alignr { text-align: right; } 
          .alignc { text-align: center; } 
       </style> 
    </head> 
    <body> 
       <?php 
     
          // ICI MODIFIEZ LE PARAMETRAGE 
          // Connexion à la base de données 
          $server = 'localhost'; 
          $user   = 'root'; 
          $dbName = 'test'; 
          $cnx    = mysql_connect($server, $user); 
          $db     = mysql_select_db($dbName); 
     
          // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste 
     
          // identifiant
       $sql = 'SELECT identifiant FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $identifiant[] = $row[0]; 
          } 
     
          // type 
          $sql = 'SELECT type FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $type[] = $row[0]; 
          } 
     
    	  // puissance 
          $sql = 'SELECT puissance FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $puissance[] = $row[0]; 
          } 
    	  // type 
          $sql = 'SELECT qtite_huile FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $qtite_huile[] = $row[0]; 
          } 
    	  // type 
          $sql = 'SELECT valeur FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $valeur[] = $row[0]; 
          } 
           // type 
          $sql = 'SELECT fusible FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $fusible[] = $row[0]; 
          } 
    	  // type 
          $sql = 'SELECT nom FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $nom[] = $row[0]; 
          } 
          // gdo 
         $sql = 'SELECT gdo FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $gdo[] = $row[0]; 
          } 
           $sql = 'SELECT date FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $date[] = $row[0]; 
          }   
         $sql = 'SELECT choix FROM installation ORDER BY id;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $choix[] = $row[0]; 
          }   
          // DONNES DE LA TABLE 
          $sql = "SELECT * FROM installation ORDER BY id;"; 
     
     
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_assoc($qry)) { 
             $data[] = $row; 
          } 
     
          // pour chaque liste il faut prévoir leur retrait du filtre  
          // en insérant une ligne vide en début de liste : <option value=""></option> 
       ?> 
      <div align="center">
       <p><strong>TRANSFORMATEURS INSTALLES</strong></p> 
       <p>Sélectionnez de un à plusieurs critères de recherche.</p> 
       <form id="frmRecherche"> 
          <!-- Liste des jours --> 
          <label for="idtifiant">Identifiant</label> 
          <select id="identifiant" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($identifiant as $identifiant): ?> 
             <option value="<?php echo $identifiant; ?>"><?php echo $identifiant; ?></option> 
             <?php endforeach; ?> 
          </select> 
          <!-- Liste des type --> 
          <label for="type">Type</label> 
          <select id="type" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($type as $untype): ?> 
             <option value="<?php echo $untype; ?>"><?php echo $untype; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
      <!-- Liste des puissances --> 
          <label for="puissance">Puissance</label> 
          <select id="puissance" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($puissance as $unpuissance): ?> 
             <option value="<?php echo $unpuissance; ?>"><?php echo $unpuissance; ?></option> 
             <?php endforeach; ?> 
          </select> 
       <!-- Liste des qtite_huile --> 
          <label for="qtite_huile">Quantite huile</label> 
          <select id="qtite_huile" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($qtite_huile as $unqtite_huile): ?> 
             <option value="<?php echo $unqtite_huile; ?>"><?php echo $unqtite_huile; ?></option> 
             <?php endforeach; ?> 
          </select> 
       <!-- Liste des type --> 
          <label for="fusible">Fusible</label> 
          <select id="fusible" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($fusible as $unfusible): ?> 
             <option value="<?php echo $unfusible; ?>"><?php echo $unfusible; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
       <!-- Liste des type --> 
          <label for="date">Date</label> 
          <select id="date" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($date as $undate): ?> 
             <option value="<?php echo $undate; ?>"><?php echo $undate; ?></option> 
             <?php endforeach; ?> 
          </select> 
       <!-- Liste des type --> 
          <label for="choix">Choix</label> 
          <select id="choix" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($choix as $unchoix): ?> 
             <option value="<?php echo $unchoix; ?>"><?php echo $unchoix; ?></option> 
             <?php endforeach; ?> 
          </select> 
          <!-- Liste des code gdo --> 
          <label for="gdo">Code GDO</label> 
          <select id="gdo" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($gdo as $gdo): ?> 
             <option value="<?php echo $gdo; ?>"><?php echo $gdo; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
          <!-- Liste des communes --> 
          <label for="nom">nom</label> 
          <select id="nom" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($nom as $id => $nom): ?> 
             <option value="<?php echo $id; ?>"><?php echo $nom; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
          <!-- Liste des valeurs pcbs --> 
          <label for="valeur">valeur</label> 
          <select id="valeur" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($valeur as $id => $valeur): ?> 
             <option value="<?php echo $id; ?>"><?php echo $valeur; ?></option> 
             <?php endforeach; ?> 
          </select> 
       </form> 
       <!-- Données de la table --> 
       <table> 
          <thead> 
             <tr> 
                <th>IDENTIFIANT</th> 
                <th>TYPE</th>
    			<th>PUISSANCE</th> 
    			<th>HUILE</th> 
    			<th>PCB</th> 
    			<th>FUSIBLE?</th> 
    			<th>COMMUNE</th> 						
                <th>GDO</th> 
                <th>DATE</th> 
    			<th>CHOIX</th> 
             </tr> 
          </thead> 
     
          <tbody id="table"> 
          <?php foreach($data as $row): ?> 
             <tr> 
                <td class="alignc"><?php echo $row['identifiant']; ?></td> 
                <td class="alignc"><?php echo $row['type']; ?></td> 
    			<td class="alignc"><?php echo $row['puissance']; ?></td>
    			<td class="alignc"><?php echo $row['qtite_huile']; ?></td> 
    			<td class="alignc"><?php echo $row['valeur']; ?></td> 
    			<td class="alignc"><?php echo $row['fusible']; ?></td> 
    			<td class="alignc"><?php echo $row['nom']; ?></td> 
    			<td class="alignc"><?php echo $row['gdo']; ?></td> 
    			<td class="alignc"><?php echo $row['date']; ?></td> 
                <td class="alignc"><?php echo $row['choix']; ?></td>
             </tr> 
          <?php endforeach; ?> 
          </tbody> 
       </table> 
       <div>
    </body> 
    </html>
    Page pour filtrer me listes deroulantes ainsi l'affichage
    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
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    <?php 
     
    // Ce script est appelé à chaque sélection d'un élément d'une liste 
     
    // suivi du critère 
    $where   = array(); 
    $data    = array(); 
     
    // données sélectionnées => filtres 
    $identifiant    = NULL; 
    $type    = NULL; 
    $puissance   = NULL; 
    $qtite_huile   = NULL; 
    $valeur = NULL; 
    $fusible = NULL; 
    $nom = NULL; 
    $gdo = NULL; 
    $date = NULL; 
    $choix = NULL; 
     
    /** 
     * CE SCRIPT ANALYSE LES SELECTIONS ET RENVOIE DES DONNEES AU FORMAT XML  
     * La structure correspond à ce que jQuery attend pour mettre à jour la page 
     * <?xml version="1.0" encoding="utf-8"?>  
     *    <xml>  
     *    <jours></jours>  
     *    <mois></mois>  
     *    <annees></annees>  
     *    <villes></villes>  
     *    <matieres></matieres>  
     *    <table></table>  
     * </xml>  
     * 
     * @var SimpleXMLElement 
     */ 
    $xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><xml></xml>'); 
     
    // on parcourt le tableau $_POST et on vérifie quelles sont les listes qui ont une sélection 
     
    // jour 
    if (isset($_POST['identifiant']) && (ctype_digit("{$_POST['identifiant']}"))) { 
       $identifiant = $_POST['identifiant']; 
       $where[] = 'installation.identifiant= ' . intval($identifiant); 
    }
    // jour 
    if (isset($_POST['type']) && (ctype_digit("{$_POST['type']}"))) { 
       $type = $_POST['type']; 
       $where[] = 'installation.type= ' . intval($type); 
    }
     
    // jour 
    if (isset($_POST['puissance']) && (ctype_digit("{$_POST['puissance']}"))) { 
       $puissance = $_POST['puissance']; 
       $where[] = 'installation.puissance= ' . intval($puissance); 
    }
     
    // jour 
    if (isset($_POST['qtite_huile']) && (ctype_digit("{$_POST['qtite_huile']}"))) { 
       $qtite_huile = $_POST['qtite_huile']; 
       $where[] = 'installation.qtite_huile= ' . intval($qtite_huile); 
    }
     
    // jour 
    if (isset($_POST['valeur']) && (ctype_digit("{$_POST['valeur']}"))) { 
       $valeur = $_POST['valeur']; 
       $where[] = 'installation.valeur= ' . intval($valeur); 
    }
    // jour 
    if (isset($_POST['fusible']) && (ctype_digit("{$_POST['fusible']}"))) { 
       $fusible = $_POST['fusible']; 
       $where[] = 'installation.fusible= ' . intval($fusible); 
    }
    // jour 
    if (isset($_POST['nom']) && (ctype_digit("{$_POST['nom']}"))) { 
       $nom = $_POST['nom']; 
       $where[] = 'installation.nom= ' . intval($nom); 
    }
    // jour 
    if (isset($_POST['gdo']) && (ctype_digit("{$_POST['gdo']}"))) { 
       $gdo = $_POST['gdo']; 
       $where[] = 'installation.gdo= ' . intval($gdo); 
    }
    // jour 
    if (isset($_POST['date']) && (ctype_digit("{$_POST['date']}"))) { 
       $date = $_POST['date']; 
       $where[] = 'installation.date= ' . intval($date); 
    }
    // jour 
    if (isset($_POST['choix']) && (ctype_digit("{$_POST['choix']}"))) { 
       $choix = $_POST['choix']; 
       $where[] = 'installation.choix= ' . intval($choix); 
    }
     
    ### FILTRAGE DES DONNÉES DES LISTES (SSI RIEN N'A DÉJÀ ÉTÉ SÉLECTIONNÉ)  
    $where = ( ! empty($where)) ? 'WHERE ' . implode(' AND ', $where) : NULL; 
     
    // ICI MODIFIEZ LE PARAMETRAGE 
    // Connexion à la base de données 
    $server = 'localhost'; 
    $user   = 'root'; 
    $dbName = 'test'; 
    $cnx    = mysql_connect($server, $user); 
    $db     = mysql_select_db($dbName); 
     
     
    // on définit le code SQL commun à toutes les requêtes 
    // voir la chaine SQL d'extraction des données de la table (plus bas) 
    $fromAndWhere = "
    select * frominstallation
    $where ;";
     
    /** 
     * Crée le code HTML pour les liste relatives aux dates : Jours Mois Années 
     * @param mixed $sql 
     * @return string 
     */ 
    function filtrageDates($sql) { 
       $data = array(); 
       $qry  = mysql_query($sql); 
       $data[] = '<option value=""></option>'; // ligne vide 
       while($row = mysql_fetch_row($qry)) { 
          $data[] = '<option value="' . $row[0] . '">' . $row[0] . '</option>'; 
       } 
       return implode("\n", $data); 
    } 
     
    /** 
     * Crée le code HTML pour les liste relatives aux villes et matières 
     * @param mixed $sql 
     * @return string 
     */ 
    function filtrageVillesMatieres($sql) { 
       $data = array(); 
       $qry = mysql_query($sql); 
       $data[] = '<option value=""></option>'; // ligne vide 
       while($row = mysql_fetch_row($qry)) { 
          $data[] = '<option value="' . $row[0] . '">' . $row[1] . '</option>'; 
       } 
       return implode("\n", $data); 
    } 
     
    // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
    $fromDates = (NULL === $where) ? 'installation' : $fromAndWhere; 
     
    // si le jour n'a pas déjà été sélectionné -> filtrage de la liste 
    if (NULL === $identifiant) { 
       $sql = "SELECT DISTINCT identifiant FROM $fromDates ORDER BY DAY id;"; 
       $xml->addChild('identifiant',  filtrageVillesMatieres($sql)); 
    } 
     
    // si le mois n'a pas déjà été sélectionné -> filtrage de la liste 
    if (NULL === $type) { 
       $sql = "SELECT DISTINCT type FROM $fromDates ORDER BY id;"; 
       $xml->addChild('tyoe',  filtrageVillesMatieres($sql)); 
    } 
     
    // si l'année n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $puissance) { 
       $sql = "SELECT DISTINCT puissance FROM $fromDates ORDER BY id;"; 
       $xml->addChild('puissance',  filtrageVillesMatieres($sql)); 
       $data = array(); 
    } 
     
    // si la ville n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $qtite_huile) { 
       // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
       $from = (NULL === $where) ? 'installation' : $fromAndWhere; 
       $sql = "SELECT DISTINCT qtite_huile FROM $from ORDER BY id;"; 
       $xml->addChild('qtite_huile',  filtrageVillesMatieres($sql));  
       $data = array(); 
    } 
     
    // si la matière n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $valeur) { 
       // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
       $from = (NULL === $where) ? 'installation' : $fromAndWhere; 
       $sql = "SELECT DISTINCT valeur FROM $from ORDER BY id;"; 
       $xml->addChild('valeur',  filtrageVillesMatieres($sql)); 
       $data = array(); 
    } 
     
     if (NULL === $fusible) { 
       $sql = "SELECT DISTINCT fusible FROM $fromDates ORDER BY DAY id;"; 
       $xml->addChild('fusible',  filtrageVillesMatieres($sql)); 
    } 
    if (NULL === $nom) { 
       $sql = "SELECT DISTINCT nom FROM $fromDates ORDER BY DAY id;"; 
       $xml->addChild('nom',  filtrageVillesMatieres($sql)); 
    } 
    if (NULL === $gdo) { 
       $sql = "SELECT DISTINCT gdo FROM $fromDates ORDER BY DAY id;"; 
       $xml->addChild('gdo',  filtrageVillesMatieres($sql)); 
    } 
    if (NULL === $date) { 
       $sql = "SELECT DISTINCT date FROM $fromDates ORDER BY DAY id;"; 
       $xml->addChild('date',  filtrageVillesMatieres($sql)); 
    } 
    if (NULL === $choix) { 
       $sql = "SELECT DISTINCT choix FROM $fromDates ORDER BY DAY id;"; 
       $xml->addChild('choix',  filtrageVillesMatieres($sql)); 
    } 
    // données de la table 
    $sql = "
    SELECT  
    *  
    FROM  
       $fromAndWhere 
    ORDER BY 
      id
    ;"; 
     
    $data = array(); 
    $qry = mysql_query($sql); 
     $monHTML = "";
    // mise en forme des données 
    // ici on reconstruit les données de la table 
    while($row = mysql_fetch_assoc($qry)) { 
    	foreach ($row as $key => $value) {
     
     $monHTML .= '<tr> 
       <td class="alignc">'.$row['identifiant'].'</td> 
       <td class="alignc">'.$row['type'].'</td> 
       <td class="alignc">'.$row['puissance'].'</td> 
       <td class="alignc">'.$row['qtite_huile'].'</td> 
        <td class="alignc">'.$row['valeur'].'</td> 
    	<td class="alignc">'.$row['fusible'].'</td>
    	<td class="alignc">'.$row['nom'].'</td> 	 
    	<td class="alignc">'.$row['gdo'].'</td> 
    	<td class="alignc">'.$row['date'].'</td> 
        <td class="alignc">'.$row['choix'].'</td> 
    </tr>' ;
     
    }
    }
     
    if (empty($data)) { // pas de données correspondant au filtre 
       $data[] = '<tr></tr>'; 
    } 
     
    $xml->addChild('table', implode("\n", $data)); # noeud attendu par jQuery dans filterLists() 
     
     
    // Envoi du header et des données 
    header('content-type: text/xml'); 
    echo $xml->asXML(); 
     
    ?>

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    quand tu prends exemple sur le code d'un tuto, essaie au moins de faire attention :
    • Le JS du 1er code est erroné : il y des virgules qui traînent dans data:
    • La connexion à la base de données se fait en root et surtout sans mot de passe ?
    • Quand tu extraits les valeurs pour alimenter tes listes de sélection, fais attention à n'extraire que des valeurs distinctes : SELECT DISTINCT ... FROM,
    • Dans le traitement php, ne recopie pas bêtement les codes de l'exemple, adaptes les : $xml->addChild('qtite_huile', filtrageVillesMatieres($sql)); parce là ça montre que t'as pas compris grand chose au tutorial,
    • Fais attention : tu utilises des mots réservés MySQL dans les noms des colonnes, te requêtes vont planter si tu ne les encadres pas de ``
    • Enfin, remplace les commentaires du code d'exemple par ceux correspondant à ta problématique.


    EDIT : regarde ça : if (isset($_POST['nom']) && (ctype_digit("{$_POST['nom']}"))), est ce que tu pense que le nom attendu est un entier ?

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    pouvez vous m'expliquer la commande addchild et la fonction filtageVillesMatieres. concernant dat j'ai enlevé la virgule à al fin de la variable

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Reprends déjà ton code intégralement en tenant compte de mes remarques précédentes.

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    ok , je ferai cela et je vous mets au courant si ça marche

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    voila j'ai pris vos remarques en compte mais à la fin ça marche toujours pas les listes ne sont pas filtrés. et j'ai une erreur au niveau de filterLists. la page xml ne peut pas être affichée Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL.....

    un seul élément de niveau supérieur est autorisé dans un document XML


    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
    <script type="application/javascript" charset="utf-8" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
    <script type="application/javascript">
       function filterLists() {
          var identifiant   = $('#tr_identifiants option:selected').val();
          var type   = $('#tr_types option:selected').val();
          var puissnce = $('#tr_puissances option:selected').val();
          var nom   = $('#tr_noms option:selected').val();
          $.ajax({
             type: 'POST',   // méthode de transmission des données
             url: 'filterLists.php',   // script à exécuter sur le serveur
             data: 'identifiant='+identifiant+'&type='+type+'&puissance='+puissance+'&nom='+nom,   // données à passer au script via le tableau $_POST
             dataType: 'xml',   // type des données attendues en retour : ici xml
             cache: false,
             success: function(response) {   // traitement du résultat (= données reçues du serveur) une fois l'appel ajax réussi
                var code;
     
               <option value=""></option> pour chaque liste qui n'a pas encore de sélection
                if ((code = $(response).find('identifiants').text()).length)    $('#tr_identifiants').html(code);
                if ((code = $(response).find('types').text()).length)   $('#tr_types').html(code);
                if ((code = $(response).find('puissances').text()).length) $('#tr_puissances').html(code);
                if ((code = $(response).find('noms').text()).length)   $('#tr_noms').html(code);
             }
          });
       }
    </script>
    Code php : 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
    <?php
      include_once("../db_connection.php");
       $sql   = "SELECT DISTINCT identifiant FROM installation ORDER BY id;";
        $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $identifiants[] = $row[0];
    		 var_dump($identifiants);
          } 
       $sql   = "SELECT DISTINCT type FROM installation ORDER BY id;";
        $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $types[] = $row[0]; 
    		 	 var_dump($types);
          } 
       $sql = "SELECT DISTINCT puissance FROM installation ORDER BY id;";
        $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $puissances[] = $row[0]; 
    		 	 var_dump($puissances);
          } 
       $sql   = "SELECT DISTINCT nom FROM installation ORDER BY id;";
        $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $noms[] = $row[0]; 
    		 	 var_dump($noms);
          } 
    ?>
     
    <p><strong>Liste des Trasformateurs Recherchés</strong></p>
    <p>Sélectionnez de un à plusieurs critères de recherche et cliquez sur le bouton "Chercher".</p>
    <hr />
    <form id="form_recherche">
       <select id="tr_identifiants" onchange="filterLists();">
          <option value=""></option>
          <?php foreach($identifiants as $identifiant): ?>
          <option value="<?php echo $identifiant; ?>"><?php echo $identifiant; ?></option>
          <?php endforeach; ?>
       </select>
     
       <select id="tr_types" onchange="filterLists();">
          <option value=""></option>
          <?php foreach($types as $type): ?>
          <option value="<?php echo $type; ?>"><?php echo $type; ?></option>
          <?php endforeach; ?>
       </select>
     
       <select id="tr_puissances" onchange="filterLists();">
          <option value=""></option>
          <?php foreach($puissances as $puissance): ?>
          <option value="<?php echo $puissance; ?>"><?php echo $puissance; ?></option>
          <?php endforeach; ?>
       </select>
     
       <select id="tr_noms" onchange="filterLists();">
          <option value=""></option>
          <?php foreach($noms as $nom): ?>
          <option value="<?php echo $nom; ?>"><?php echo $nom; ?></option>
          <?php endforeach; ?>
       </select>
    </form>

    Code php : 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
    <?php
     
    # suivi du critère
    $where   = array();
    $data    = array();
    # données sélectionnées
    $identifiant  = NULL;
    $type   = NULL;
    $puissance = NULL;
    $nom   = NULL;
     
     
    /**
     * @var SimpleXMLElement
     */
    $xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><xml></xml>');
     
     
    if (isset($_POST['identifiant']) && (strlen($_POST['identifiant']))) {
       $identifiant  = $_POST['identifiant'];
       $where[] = 'identifiant = "' . mysql_escape_string($identifiant) . '"';
    }
     
    if (isset($_POST['type']) && (strlen($_POST['type']))) {
       $type = $_POST['type'];
       $where[] = 'type = "' . mysql_escape_string($type) . '"';
    }
     
    if (isset($_POST['puissance']) && (strlen($_POST['puissance']))) {
       $puissance = $_POST['puissance'];
       $where[] = 'puissance= "' . mysql_escape_string($puissance) . '"';
    }
     
    if (isset($_POST['nom']) && (strlen($_POST['nom']))) {
       $nom = $_POST['nom'];
       $where[] = 'nom = "' . mysql_escape_string($nom) . '"';
    }
     
    $where = (empty($where)) ? NULL : 'WHERE ' . implode(' AND ', $where);
     
     
    if (NULL === $identifiant) {
       $sql = "SELECT DISTINCT identifiant FROM installation $where ORDER BY id;";
     
       $data[] = '<option value=""></option>'; # ligne vide
       foreach($identifiants as $identifiant) {
          $data[] = '<option value="' . $identifiant . '">' . $identifiant . '</option>';
       }
       $xml->addChild('identifiants', implode("\n", $data)); # noeud attendu par jQuery dans filterLists()
       $data = array();
    }
     
     
    if (NULL === $type) {
       $sql = "SELECT DISTINCT type FROM installation $where ORDER BY id;";
     
       // mise en forme des données
       $data[] = '<option value=""></option>'; # ligne vide
       foreach($types as $ype) {
          $data[] = '<option value="' . $type . '">' . $type . '</option>';
       }
       $xml->addChild('types', implode("\n", $data)); # noeud attendu par jQuery dans filterLists()
       $data = array();
    }
     
     
    if (NULL === $puissance) {
       $sql = "SELECT DISTINCT puissance FROM installation $where ORDER BY id;";
     
       $data[] = '<option value=""></option>'; # ligne vide
       foreach($puissances as $puissance) {
          $data[] = '<option value="' . $puissance . '">' . $puissance . '</option>';
       }
       $xml->addChild('puissances', implode("\n", $data)); # noeud attendu par jQuery dans filterLists()
       $data = array();
    }
     
     
    if (NULL === $theme) {
       $sql = "SELECT DISTINCT nom FROM insallation $where ORDER BY id;";
     
       // mise en forme des données
       $data[] = '<option value=""></option>'; # ligne vide
       foreach($noms as $nom) {
          $data[] = '<option value="' . $nom . '">' . $nom . '</option>';
       }
       $xml->addChild('noms', implode("\n", $data)); # noeud attendu par jQuery dans filterLists()
       $data = array();
    }
     
    header('content-type: text/xml');
    echo $xml->asXML();
     
    ?>

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    J'ai parcouru ton code et je pense sérieusement que tu devrais commencer par un truc beaucoup plus simple. Gérer des listes liées n'est pas à la portée des débutants. Il faut déjà avoir une bonne vision du fonctionnement d'une page web et des échanges entre le navigateur et le serveur.

    J'ai pris le temps de tout reprendre, je n'ai rien esssayé donc croisage des orteils :

    recherche.php
    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
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    <?php
     
    // ICI MODIFIEZ LE PARAMETRAGE
    // Connexion à la base de données
    $server  = 'localhost';
    $user    = 'root';
    $db_name = 'test';
    $cnx     = mysql_connect($server, $user);
    $db      = mysql_select_db($db_name);
     
    // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
    $identifiants = array();
    $types        = array();
    $puissances   = array();
    $communes     = array();
    $data         = array();
     
    // identifiant
    $sql = 'SELECT DISTINCT identifiant FROM installation ORDER BY identifiant';
    $qry = mysql_query($sql);
    while ($row = mysql_fetch_row($qry))
    {
        $identifiants[] = $row[0];
    }
     
    // type
    $sql = 'SELECT DISTINCT `type` FROM installation ORDER BY `type`';
    $qry = mysql_query($sql);
    while ($row = mysql_fetch_row($qry))
    {
        $types[] = $row[0];
    }
     
    // puissance
    $sql = 'SELECT DISTINCT puissance FROM installation ORDER BY puissance';
    $qry = mysql_query($sql);
    while ($row = mysql_fetch_row($qry))
    {
        $puissances[] = $row[0];
    }
     
    // communes
    $sql = 'SELECT DISTINCT nom FROM installation ORDER BY nom';
    $qry = mysql_query($sql);
    while ($row = mysql_fetch_row($qry))
    {
        $communes[] = $row[0];
    }
     
    // DONNES DE LA TABLE
    $sql = "SELECT * FROM installation ORDER BY id;";
    $qry = mysql_query($sql);
    while ($row = mysql_fetch_assoc($qry))
    {
        $data[] = $row;
    }
     
    // fonction d'échappement des caractères
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); };
     
    // pour chaque liste il faut prévoir leur retrait du filtre
    // en insérant une ligne vide en début de liste : <option value=""></option>
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
       <meta http-equiv="Cache-Control" content="no-cache">
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       <title>Recherche</title>
        <link rel="stylesheet" href="../Parc_Transformateur.css" />
        <?php include 'menu_admin.php' ?>
        <script type="application/javascript" charset="utf-8" src="http://code.jquery.com/jquery-1.6.3.min.js"></script>
        <script type="application/javascript">
        function filterLists() {
             // ici on récupère les valeurs sélectionnées pour chaque liste avec les sélecteurs de jQuery
             var identifiant = $('#identifiant option:selected').val();
             var type        = $('#type option:selected').val();
             var puissance   = $('#puissance option:selected').val();
             var nom         = $('#nom option:selected').val();
             // on fait notre appel ajax paramétré (pas besoin de s'occuper de l'implémentation du XMLHttpRequest, jQuery le fait pour toi)
             $.ajax({
                type: 'POST',   // méthode de transmission des données
                url: 'filterLists.php',   // script à exécuter sur le serveur
                data: 'identifiant='+identifiant+'&type='+type+'&puissance='+puissance+'&nom='+nom,  // données à passer au script via le tableau $_POST
                dataType: 'xml',   // type des données attendues en retour : ici xml
                cache: false,
                success: function(response) {   // traitement du résultat (= données reçues du serveur) une fois l'appel ajax réussi
                   var code;
                   // vu que la réponse est au format xml, on demande à jquery de trouver des noeuds spécifiques
                   // et si ces noeuds contiennent des données alors on remplace les données des listes liées par celles renvoyées par le serveur
                   // en clair : on remplace si nécessaire l'ensemble des lignes <option value=""></option> pour chaque liste qui n'a pas encore de sélection
                   if ((code = $(response).find('identifiant').text()).length) $('#identifiant').html(code);
                   if ((code = $(response).find('type').text()).length)        $('#type').html(code);
                   if ((code = $(response).find('puissance').text()).length)   $('#puissance').html(code);
                   if ((code = $(response).find('commune').text()).length)     $('#commune').html(code);
                   if ((code = $(response).find('table').text()).length)       $('#table').html(code);
                }
            });
        }
        </script>
       <style type="text/css">
          body { font-family: "arial"; }
          table { width: 600px;;}
          table, tr, th, td { border: 1px solid black; border-collapse: collapse; padding: 4px;}
          .alignr { text-align: right; }
          .alignc { text-align: center; }
       </style>
    </head>
    <body>
        <div align="center">
            <p><strong>TRANSFORMATEURS INSTALLES</strong></p>
            <p>Sélectionnez de un à plusieurs critères de recherche.</p>
            <form id="frmRecherche">
                <!-- Liste des jours -->
                <label for="identifiant">Identifiant</label>
                <select id="identifiant" onchange="filterLists();">
                    <option value=""></option>
                    <?php foreach($identifiants as $v): ?>
                    <option value="<?php echo $hsc($v); ?>"><?php echo $hsc($v); ?></option>
                    <?php endforeach; ?>
                </select>
                <!-- Liste des type -->
                <label for="type">Type</label>
                <select id="type" onchange="filterLists();">
                    <option value=""></option>
                    <?php foreach($types as $v): ?>
                    <option value="<?php echo $hsc($v); ?>"><?php echo $hsc($v); ?></option>
                    <?php endforeach; ?>
                </select>
                <!-- Liste des puissances -->
                <label for="puissance">Puissance</label>
                <select id="puissance" onchange="filterLists();">
                    <option value=""></option>
                    <?php foreach($puissances as $v): ?>
                    <option value="<?php echo $hsc($v); ?>"><?php echo $hsc($v); ?></option>
                    <?php endforeach; ?>
                </select>
                <!-- Liste des communes -->
                <label for="commune">nom</label>
                <select id="commune" onchange="filterLists();">
                     <option value=""></option>
                     <?php foreach($communes as $v): ?>
                     <option value="<?php echo $hsc($v); ?>"><?php echo $hsc($v); ?></option>
                     <?php endforeach; ?>
                </select>
            </form>
            <!-- Données de la table -->
           <table>
              <thead>
                 <tr>
                    <th>IDENTIFIANT</th>
                    <th>TYPE</th>
                    <th>PUISSANCE</th>
                    <th>COMMUNE</th>
                 </tr>
              </thead>
              <tbody id="table">
                <?php foreach($data as $row): ?>
                <tr>
                    <td class="alignc"><?php echo $hsc($row['identifiant']) ?></td>
                    <td class="alignc"><?php echo $hsc($row['type']) ?></td>
                    <td class="alignc"><?php echo $hsc($row['puissance']) ?></td>
                    <td class="alignc"><?php echo $hsc($row['nom']) ?></td>
                </tr>
                <?php endforeach; ?>
              </tbody>
           </table>
        </div>
    </body>
    </html>
    filterLists.php
    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
    <?php
     
    // Ce script est appelé à chaque sélection d'un élément d'une liste
     
    /**
     * CE SCRIPT ANALYSE LES SELECTIONS ET RENVOIE DES DONNEES AU FORMAT XML
     * La structure correspond à ce que jQuery attend pour mettre à jour la page
     * <?xml version="1.0" encoding="utf-8"?>
     * <xml>
     *     <identifiant></identifiant>
     *     <type></type>
     *     <puissance></puissance>
     *     <commune></commune>
     *     <table></table>
     * </xml>
     *
     * @var SimpleXMLElement
     */
    $xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><xml></xml>');
     
    // ICI MODIFIEZ LE PARAMETRAGE
    // Connexion à la base de données
    $server  = 'localhost';
    $user    = 'root';
    $db_name = 'test';
    $cnx     = mysql_connect($server, $user);
    $db      = mysql_select_db($db_name);
     
    // suivi du critère
    $where   = array();
    $data    = array();
     
    // données sélectionnées => filtres
    $identifiant = null;
    $type        = null;
    $puissance   = null;
    $commune     = null;
     
    // on parcourt le tableau $_POST et on vérifie quelles sont les listes qui ont une sélection
    // je considère que toutes les valeurs sont des textes
     
    if (isset($_POST['identifiant']))
    {
       $identifiant = $_POST['identifiant'];
       $where[]     = 'installation.identifiant = "'. mysql_real_escape_string($identifiant) .'"';
    }
     
    if (isset($_POST['type']))
    {
       $type    = $_POST['type'];
       $where[] = 'installation.`type` = "'. mysql_real_escape_string($type) .'"';
    }
     
    if (isset($_POST['puissance']))
    {
       $puissance = $_POST['puissance'];
       $where[]   = 'installation.identifiant = "'. mysql_real_escape_string($puissance) .'"';
    }
     
    if (isset($_POST['commune']))
    {
       $commune = $_POST['commune'];
       $where[] = 'installation.nom = "'. mysql_real_escape_string($commune) .'"';
    }
     
    /* FILTRAGE DES DONNÉES DES LISTES (SSI RIEN N'A DÉJÀ ÉTÉ SÉLECTIONNÉ) */
    $where = (empty($where)) ? '' : 'WHERE ' . implode(' AND ', $where);
     
    /**
     * Crée le code HTML pour les listes
     * @param mixed $sql
     * @return string
     */
    function selectOptionsBuilder($sql)
    {
       $data = array();
       $qry  = mysql_query($sql);
       $data[] = '<option value=""></option>'; // ligne vide
       while ($row = mysql_fetch_row($qry))
       {
           $v = htmlspecialchars($row[0], ENT_QUOTES);
          $data[] = '<option value="'.$v.'">'.$v.'</option>';
       }
     
       return implode("\n", $data);
    }
     
    // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
    $fromDates = (NULL === $where) ? 'installation' : $fromAndWhere;
     
    // si identifiant n'a pas déjà été sélectionné -> filtrage de la liste
    if ($identifiant === null)
    {
       $sql = "SELECT DISTINCT identifiant FROM installation {$where} ORDER BY identifiant";
       $xml->addChild('identifiant',  selectOptionsBuilder($sql));
    }
     
    // si type n'a pas déjà été sélectionné -> filtrage de la liste
    if ($type === null)
    {
       $sql = "SELECT DISTINCT `type` FROM installation {$where} ORDER BY `type`";
       $xml->addChild('type',  selectOptionsBuilder($sql));
    }
     
    // si puissance n'a pas déjà été sélectionné -> filtrage de la liste
    if ($puissance === null)
    {
       $sql = "SELECT DISTINCT puissance FROM installation {$where} ORDER BY puissance";
       $xml->addChild('puissance',  selectOptionsBuilder($sql));
    }
     
    // si commune n'a pas déjà été sélectionné -> filtrage de la liste
    if ($commune === null)
    {
       $sql = "SELECT DISTINCT commune FROM installation {$where} ORDER BY commune";
       $xml->addChild('commune',  selectOptionsBuilder($sql));
    }
     
    // fonction d'échappement des caractères
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); };
     
    // données de la table
    $sql  = "SELECT * FROM installation {$where} ORDER BY id";
    $data = array();
    $qry  = mysql_query($sql);
     
    // mise en forme des données
    // ici on reconstruit les données de la table
    while ($row = mysql_fetch_assoc($qry))
    {
        $data[] =
    <<<HTML
    <tr>
        <td class="alignc">{$hsc($row['identifiant'])}</td>
        <td class="alignc">{$hsc($row['type'])}</td>
        <td class="alignc">{$hsc($row['puissance'])}</td>
        <td class="alignc">{$hsc($row['nom'])}</td>
    </tr>
    HTML;
    }
     
    if (empty($data))       // pas de données correspondant au filtre
    {
       $data[] = '<tr></tr>';
    }
     
    $xml->addChild('table', implode("\n", $data)); # noeud attendu par jQuery dans filterLists()
     
     
    // Envoi du header et des données
    header('content-type: text/xml');
    echo $xml->asXML();

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    Merci pour votre aide . j'ai toutes mes données dans mes listes déroulantes mais le filtrage ne marche pas toujours, j'ai remplaçé commune par nom car dans ma base de donnée je l'ai nommé "nom". sinon j'utilise internet explorer, est ce que venir d'ici . Merci

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    avec IE il est préférable de remplacer
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="application/javascript"
    par
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript"

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Dans l'absolu, il est surtout préférable d'utiliser un doctype HTML5 et <script> tout court.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    dans l'absolu oui mais dans le quotidien c'est pas le cas
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    Et puis comme je l'ai déjà souligné, je pense que ce dev est débutant et s'attaque à trop gros trop tôt...

  12. #12
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    Merci , oui je suis débutant mais à la base je suis pas informatcien je veux améliorer mon application par l'utilisation d'un formulaire de recherche comme la votre mais la malheureusement ça marche pas toujours. je vois pas d'ou ça peut venir le probleme

  13. #13
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    je n ai fait plein d'essai mais je n arrive pas à faire fonctionner ce code, pouvez vous me dire pourquoi ça fonctionne pas ??

  14. #14
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    je ne sais pas pourquoi ça ne fonctionne pas chez toi.
    En mettant l'affichage des erreurs, tu obtiens quoi ?
    Mets ça au début du script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    error_reporting(E_ALL);
    et réessaie

  15. #15
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    ça m affiche rien au niveau de la page recherche.php j'ai bien les valeurs dans les listes déroulantes mais le filtrage ne fonctionne pas et au niveau de la page filterList.php j'ai cette erreur :


    La page XML ne peut pas être affichée
    Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.

    Un seul élément de niveau supérieur est autorisé dans un document XML. Erreur de traitement de la ressource http://localhos...

    <font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>

  16. #16
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut

    Il faudrait que tu apprennes à déboguer tes applications parce que sinon tu ne vas pas t'en sortir. Utilise Firefox avec l'extension Firebug pour suivre le déroulement du code, pose des points d'arrêts et vérifie bien l'enchaînement des appels. Assures-toi qu'au chargement de la page, le console JS n'émet aucune erreur et puis vérifie que la fonction JS filterLists() est appelée correctement.
    Pose des points d'arrêts dans le code JS pour suivre le traitement pas à pas de ce dernier.

    Bref, potasse un peu les outils qui vont te permettre d'avancer.

  17. #17
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    OK, merci je vais télécharger firefox et tester le code pas à pas

  18. #18
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    j'ai fait le débogage mais j'ai une erreur que je comprends pas au niveau de la fonction ini_set ('display_errors',true);
    Erreur : la valeur de a propriétéé "ini_set" est null ou non définie, pas un objet function

  19. #19
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    En même temps, ini_set(), c'est pas exactement du JavaScript...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  20. #20
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 377
    Par défaut
    oui c'est de php l'erreur c'était au niveau de la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var identifiant =$('#identifiants option:selected').val();
    et l'erreur : la valeur de la propriété $ est null ou non définie, pas un objet function

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2010] [Formulaire] Filtrage des données avec zone de liste déroulante
    Par Lologolas dans le forum IHM
    Réponses: 2
    Dernier message: 22/11/2011, 12h14
  2. Réponses: 2
    Dernier message: 30/10/2007, 11h27
  3. Réponses: 3
    Dernier message: 30/03/2007, 10h53
  4. [Recherche] Diagramme des données
    Par un_passant dans le forum 2D
    Réponses: 9
    Dernier message: 29/11/2006, 10h34
  5. Réponses: 22
    Dernier message: 07/12/2005, 14h51

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