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 :

Filtrage Tableau par Liste deroulante.


Sujet :

PHP & Base de données

  1. #41
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Bonjour !

    Oui effectivement j'me suis embarqué dans un truc... mais j'sais même pas comment j'ai fait

    J'ai repris ton fichier et j'essaye de le comprendre (parce que j'suis pas extremement calé dans ce domaine )

    J'ai terminé les <select> qui manquaient.

    La fonction de rappel c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onchange="filterLists();
    ?

    Quand je lance la page, j'ai une magnifique erreur que je ne comprends pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Fatal error: Cannot use [] for reading in C:\wamp\www\ROS\Copie de Liste\index.php on line 12
    J'ai beau chercher depuis 1h.. Je ne comprends pas l'erreur à la ligne 12 vu que je ne l'ai pas modifié !


  2. #42
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Postes ton code entier, stp

  3. #43
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    index.php (j'pense n'avoir rien oublié ?)

    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
    // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
    // Tu as 4 listes : Raison sociale | ROS | Code postal | Produit
     
    mysql_connect('localhost', 'root', '');
    mysql_select_db('xls_db');
     
    // raison sociale
    $sql = 'SELECT DISTINCT client FROM histo ORDER BY client';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataClient[] = $row[];
    }
     
    // ROS
    $sql = 'SELECT DISTINCT ros FROM histo ORDER BY ros';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataRos[] = $row[];
    }
     
    // code postal
    $sql = 'SELECT DISTINCT codepostal FROM histo ORDER BY codepostal';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataCp[] = $row[];
    }
     
    // produit
    $sql = 'SELECT DISTINCT id_produit FROM histo ORDER BY id_produit';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataProduit[] = $row[];
    }
     
    // historique non filtré
    // produit
    $sql = 'SELECT * FROM histo';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataHisto[] = $row[];
    }
     
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); }
     
    ?>
    <!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>Projet ROS</title>
       <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
       // 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>
    ?>
       <p><strong>PROJET ROS</strong></p>
       <p>Sélectionnez de un à plusieurs critères de recherche.</p>
       <form id="frmRecherche">
     
        <!-- Liste des clients -->
          <label for="clients">Clients</label>
          <select id="clients" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataClient as $client): ?>
             <option value="<?php echo $hsc($client); ?>"><?php echo $hsc($client); ?></option>
             <?php endforeach; ?>
          </select>
     
        <!-- Liste des ROS-->
          <label for="ros">ROS</label>
          <select id="ros" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataRos as $ros): ?>
             <option value="<?php echo $hsc($ros); ?>"><?php echo $hsc($ros); ?></option>
             <?php endforeach; ?>
          </select>
     
    	<!-- Liste des codes postaux-->
          <label for="cp">Code Postal</label>
          <select id="cp" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataCp as $cp): ?>
             <option value="<?php echo $hsc($cp); ?>"><?php echo $hsc($cp); ?></option>
             <?php endforeach; ?>
          </select>
     
    	<!-- Liste des produits-->
          <label for="produit">Produits</label>
          <select id="produit" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataProduit as $produit): ?>
             <option value="<?php echo $hsc($produit); ?>"><?php echo $hsc($produit); ?></option>
             <?php endforeach; ?>
          </select>
     
       </form>
     
       <!-- Données de la table -->
       <table>
          <thead>
             <tr>
                <th>Produit</th>
                <th>Type</th>
                <th>ROS</th>
                <th>Client</th>
                <th>Adresse</th>
                <th>Ville</th>
                <th>CP</th>
             </tr>
          </thead>
          <tbody id="table">
             <?php foreach($dataHisto as $row): ?>
             <tr>
                <td><?php echo $hsc($row['id_produit']); ?></td>
                <td><?php echo $hsc($row['type_produit']); ?></td>
                <td><?php echo $hsc($row['ros']); ?></td>
                <td><?php echo $hsc($row['client']); ?></td>
                <td><?php echo $hsc($row['adresse']); ?></td>
                <td><?php echo $hsc($row['ville']); ?></td>
                <td><?php echo $hsc($row['codepostal']); ?></td>
             </tr>
             <?php endforeach; ?>
          </tbody>
       </table>
    </body>
    </html>
    filterLists.php (modifié jusque la ligne 70...)

    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
    <?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 
    $client = NULL; 
    $ros = NULL; 
    $cp = NULL; 
    $produit = 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 
     
    // client 
    if (isset($_POST['clients']) && (ctype_digit("{$_POST['clients']}"))) { 
      $client = $_POST['clients']; 
      $where[] = 'histo.client = ' . intval($client); 
    } 
     
    // ros 
    if (isset($_POST['ros']) && (ctype_digit("{$_POST['ros']}"))) { 
      $ros = $_POST['ros']; 
      $where[] = 'histo.ros = ' . intval($ros); 
    } 
     
    // cp 
    if (isset($_POST['cp']) && (ctype_digit("{$_POST['cp']}"))) { 
      $cp = $_POST['cp']; 
      $where[] = 'histo.codepostal = ' . intval($cp); 
    } 
     
    // produit 
    if (isset($_POST['produit']) && (ctype_digit("{$_POST['produit']}"))) { 
      $produit = $_POST['produit']; 
      $where[] = 'histo.client = ' . intval($produit); 
    } 
     
    ### 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'; 
    $pwd = ''; 
    $dbName = 'xls_db'; 
    $cnx = mysql_connect($server, $user, $pwd); 
    $db = mysql_select_db($dbName); 
     
    //////////////////// --> A partir d'ici je ne comprends plus <-- ///////////////////////
     
    // 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 = <<<SQL 
    t_session_matiere  
      INNER JOIN t_matiere ON t_session_matiere.idMatiere = t_matiere.idMatiere 
      INNER JOIN t_session ON t_session_matiere.idSession = t_session.idSession 
      INNER JOIN t_ville ON t_session.idVille = t_ville.idVille 
    $where 
    SQL; 
     
    /** 
     * 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) ? 't_session' : $fromAndWhere; 
     
    // si le jour n'a pas déjà été sélectionné -> filtrage de la liste 
    if (NULL === $jour) { 
      $sql = "SELECT DISTINCT DAY(t_session.date_) FROM $fromDates ORDER BY DAY(t_session.date_);"; 
      $xml->addChild('jours', filtrageDates($sql)); 
    } 
     
    // si le mois n'a pas déjà été sélectionné -> filtrage de la liste 
    if (NULL === $mois) { 
      $sql = "SELECT DISTINCT MONTH(t_session.date_) FROM $fromDates ORDER BY MONTH(t_session.date_);"; 
      $xml->addChild('mois', filtrageDates($sql)); 
    } 
     
    // si l'année n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $annee) { 
      $sql = "SELECT DISTINCT YEAR(t_session.date_) FROM $fromDates ORDER BY YEAR(t_session.date_);"; 
      $xml->addChild('annees', filtrageDates($sql)); 
      $data = array(); 
    } 
     
    // si la ville n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $ville) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 't_ville' : $fromAndWhere; 
      $sql = "SELECT DISTINCT t_ville.idVille, t_ville.ville FROM $from ORDER BY t_ville.ville;"; 
      $xml->addChild('villes', filtrageVillesMatieres($sql));  
      $data = array(); 
    } 
     
    // si la matière n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $matiere) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 't_matiere' : $fromAndWhere; 
      $sql = "SELECT DISTINCT t_matiere.idMatiere, t_matiere.matiere FROM $from ORDER BY t_matiere.matiere;"; 
      $xml->addChild('matieres', filtrageVillesMatieres($sql)); 
      $data = array(); 
    } 
     
     
    // données de la table 
    $sql = <<<SQL 
    SELECT  
      t_ville.ville,  
      t_session.date_,  
      t_matiere.matiere,  
      t_session_matiere.nbInscrit  
    FROM  
      $fromAndWhere 
    ORDER BY 
      t_ville.ville ASC,  
      t_session.date_ DESC,  
      t_matiere.matiere ASC; 
    SQL; 
     
    $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>{$row['ville']}</td> 
      <td class="alignc">{$row['date_']}</td> 
      <td>{$row['matiere']}</td> 
      <td class="alignr">{$row['nbInscrit']}</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(); 
     
    ?>

  4. #44
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par stevenP Voir le message
    index.php (j'pense n'avoir rien oublié ?)
    Si peu !
    Tu as juste oublié le bloc gérant l'appel ajax !!!

    Le code de filterLists.php doit être adapté à ta problématique. Ca ne sert à rien de renvoyer des données XML qui ne seront pas exploitables en retour dans ta page : jours, mois, annees, matieres => tout ça ne te sert strictement à rien (c'est adapté au tutorial), par contre ça c'est utile :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xml>  
       <clients></clients>  
       <ros></ros>  
       <cp></cp>  
       <produits></produits>  
       <table></table>  
    </xml>
    Allez bon courage....

  5. #45
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Ah oui.. J'y peut rien j'suis pas super compétent dans ce domaine ! J'l'ai précisé !

    J'ai donc rajouté le bloc dans le <head>, c'est bien ç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
    36
    37
    38
    39
    40
    41
    42
    <head>
       <meta http-equiv="Cache-Control" content="no-cache">
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       <title>Projet ROS</title>
       <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 client = $('#clients option:selected').val(); 
      var ros = $('#ros option:selected').val(); 
      var cp = $('#cps option:selected').val(); 
      var produit = $('#produits 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: 'client='+client+'&ros='+ros+'&cp='+cp+'&produit='+produit, // 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('clients').text()).length) $('#clients').html(code); 
      if ((code = $(response).find('ros').text()).length) $('#ros').html(code); 
      if ((code = $(response).find('cps').text()).length) $('#cps').html(code); 
      if ((code = $(response).find('produits').text()).length) $('#produits').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>

  6. #46
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    C'est mieux
    Montre comment tu as adapté le code de filterLists.php

  7. #47
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Ensuite toujours dans l'index.php , j'ai ajouté ça au début du <body>

    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
     // ICI MODIFIEZ LE PARAMETRAGE 
      // Connexion à la base de données 
      $server = 'localhost'; 
      $user = 'root'; 
      $pwd = ''; 
      $dbName = 'xls_db'; 
      $cnx = mysql_connect($server, $user, $pwd); 
      $db = mysql_select_db($dbName); 
     
      // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
     
      // CLIENTS  
      $sql = 'SELECT DISTINCT histo.client FROM histo ORDER BY histo.client;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataClient[] = $row[0]; 
      }   
     
      // ROS
      $sql = 'SELECT DISTINCT histo.ros FROM histo ORDER BY histo.ros;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataRos[] = $row[0]; 
      }   
     
      // CODEPOSTAL
      $sql = 'SELECT DISTINCT histo.codepostal FROM histo ORDER BY histo.codepostal;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataCp[] = $row[0]; 
      }   
     
      // PRODUITS
      $sql = 'SELECT DISTINCT histo.id_produit FROM histo ORDER BY histo.id_produit;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataProduit[] = $row[0]; 
      }   
     
      // DONNES DE LA TABLE 
      $sql = <<<SQL 
    SELECT histo.id_produit, histo.type_produit, histo.ros, histo.client, histo.adresse, histo.ville, histo.codepostal
    FROM histo  
    ORDER BY 
      histo.id_produit ASC,  
      histo.type_produit ASC,  
      histo.ros ASC; 
      histo.client ASC;
      histo.adresse ASC;
      histo.ville ASC;
      histo.codepostal ASC;
    SQL; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_assoc($qry)) { 
      $data[] = $row; 
      }
    oui ?

  8. #48
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    J'ai modifié comme cela. j'ai testé mes fichiers. J'ai toujours la même erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Cannot use [] for reading in C:\wamp\www\ROS\Copie de Liste\index.php on line 12


    index.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
    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
    <?php
    // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
    // Tu as 4 listes : Raison sociale | ROS | Code postal | Produit
     
    mysql_connect('localhost', 'root', '');
    mysql_select_db('xls_db');
     
    // raison sociale
    $sql = 'SELECT DISTINCT client FROM histo ORDER BY client';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataClient[] = $row[];
    }
     
    // ROS
    $sql = 'SELECT DISTINCT ros FROM histo ORDER BY ros';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataRos[] = $row[];
    }
     
    // code postal
    $sql = 'SELECT DISTINCT codepostal FROM histo ORDER BY codepostal';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataCp[] = $row[];
    }
     
    // produit
    $sql = 'SELECT DISTINCT id_produit FROM histo ORDER BY id_produit';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataProduit[] = $row[];
    }
     
    // historique non filtré
    // produit
    $sql = 'SELECT * FROM histo';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataHisto[] = $row[];
    }
     
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); }
     
    ?>
    <!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>Projet ROS</title>
       <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 client = $('#clients option:selected').val(); 
      var ros = $('#ros option:selected').val(); 
      var cp = $('#cps option:selected').val(); 
      var produit = $('#produits 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: 'client='+client+'&ros='+ros+'&cp='+cp+'&produit='+produit, // 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('clients').text()).length) $('#clients').html(code); 
      if ((code = $(response).find('ros').text()).length) $('#ros').html(code); 
      if ((code = $(response).find('cps').text()).length) $('#cps').html(code); 
      if ((code = $(response).find('produits').text()).length) $('#produits').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'; 
      $pwd = ''; 
      $dbName = 'xls_db'; 
      $cnx = mysql_connect($server, $user, $pwd); 
      $db = mysql_select_db($dbName); 
     
      // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
     
      // CLIENTS  
      $sql = 'SELECT DISTINCT histo.client FROM histo ORDER BY histo.client;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataClient[] = $row[0]; 
      }   
     
      // ROS
      $sql = 'SELECT DISTINCT histo.ros FROM histo ORDER BY histo.ros;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataRos[] = $row[0]; 
      }   
     
      // CODEPOSTAL
      $sql = 'SELECT DISTINCT histo.codepostal FROM histo ORDER BY histo.codepostal;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataCp[] = $row[0]; 
      }   
     
      // PRODUITS
      $sql = 'SELECT DISTINCT histo.id_produit FROM histo ORDER BY histo.id_produit;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataProduit[] = $row[0]; 
      }   
     
      // DONNES DE LA TABLE 
      $sql = <<<SQL 
    SELECT histo.id_produit, histo.type_produit, histo.ros, histo.client, histo.adresse, histo.ville, histo.codepostal
    FROM histo  
    ORDER BY 
      histo.id_produit ASC,  
      histo.type_produit ASC,  
      histo.ros ASC; 
      histo.client ASC;
      histo.adresse ASC;
      histo.ville ASC;
      histo.codepostal ASC;
    SQL; 
      $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>
    ?>
       <p><strong>PROJET ROS</strong></p>
       <p>Sélectionnez de un à plusieurs critères de recherche.</p>
       <form id="frmRecherche">
     
        <!-- Liste des clients -->
          <label for="clients">Clients</label>
          <select id="clients" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataClient as $client): ?>
             <option value="<?php echo $hsc($client); ?>"><?php echo $hsc($client); ?></option>
             <?php endforeach; ?>
          </select>
     
        <!-- Liste des ROS-->
          <label for="ros">ROS</label>
          <select id="ros" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataRos as $ros): ?>
             <option value="<?php echo $hsc($ros); ?>"><?php echo $hsc($ros); ?></option>
             <?php endforeach; ?>
          </select>
     
    	<!-- Liste des codes postaux-->
          <label for="cp">Code Postal</label>
          <select id="cp" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataCp as $cp): ?>
             <option value="<?php echo $hsc($cp); ?>"><?php echo $hsc($cp); ?></option>
             <?php endforeach; ?>
          </select>
     
    	<!-- Liste des produits-->
          <label for="produit">Produits</label>
          <select id="produit" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataProduit as $produit): ?>
             <option value="<?php echo $hsc($produit); ?>"><?php echo $hsc($produit); ?></option>
             <?php endforeach; ?>
          </select>
     
       </form>
     
       <!-- Données de la table -->
       <table>
          <thead>
             <tr>
                <th>Produit</th>
                <th>Type</th>
                <th>ROS</th>
                <th>Client</th>
                <th>Adresse</th>
                <th>Ville</th>
                <th>CP</th>
             </tr>
          </thead>
          <tbody id="table">
             <?php foreach($dataHisto as $row): ?>
             <tr>
                <td><?php echo $hsc($row['id_produit']); ?></td>
                <td><?php echo $hsc($row['type_produit']); ?></td>
                <td><?php echo $hsc($row['ros']); ?></td>
                <td><?php echo $hsc($row['client']); ?></td>
                <td><?php echo $hsc($row['adresse']); ?></td>
                <td><?php echo $hsc($row['ville']); ?></td>
                <td><?php echo $hsc($row['codepostal']); ?></td>
             </tr>
             <?php endforeach; ?>
          </tbody>
       </table>
    </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
    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
    <?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 
    $client = NULL; 
    $ros = NULL; 
    $cp = NULL; 
    $produit = 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>  
     *  <clients></clients>  
     *  <ros></ros>  
     *  <cp></cp>  
     *  <produits></produits>  
     *  <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 
     
    // client 
    if (isset($_POST['clients']) && (ctype_digit("{$_POST['clients']}"))) { 
      $client = $_POST['clients']; 
      $where[] = 'histo.client = ' . intval($client); 
    } 
     
    // ros 
    if (isset($_POST['ros']) && (ctype_digit("{$_POST['ros']}"))) { 
      $ros = $_POST['ros']; 
      $where[] = 'histo.ros = ' . intval($ros); 
    } 
     
    // cp 
    if (isset($_POST['cp']) && (ctype_digit("{$_POST['cp']}"))) { 
      $cp = $_POST['cp']; 
      $where[] = 'histo.codepostal = ' . intval($cp); 
    } 
     
    // produit 
    if (isset($_POST['produit']) && (ctype_digit("{$_POST['produit']}"))) { 
      $produit = $_POST['produit']; 
      $where[] = 'histo.id_produit = ' . intval($produit); 
    } 
     
    ### 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'; 
    $pwd = ''; 
    $dbName = 'xls_db'; 
    $cnx = mysql_connect($server, $user, $pwd); 
    $db = mysql_select_db($dbName); 
     
    //////////////////// --> A partir d'ici je ne comprends plus <-- ///////////////////////
     
    // 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 = <<<SQL 
    histo
    $where 
    SQL; 
     
    /** 
     * Crée le code HTML pour les listes 
     * @param mixed $sql 
     * @return string 
     */ 
    function filtrage($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) ? 'histo' : $fromAndWhere; 
     
    // si le client n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $client) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.client FROM $from ORDER BY histo.client;"; 
      $xml->addChild('clients', filtrage($sql));  
      $data = array(); 
    } 
     
    // si le ros n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $ros) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.ros FROM $from ORDER BY histo.ros;"; 
      $xml->addChild('ros', filtrage($sql));  
      $data = array(); 
    } 
     
    // si le Code postal n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $cp) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.codepostal FROM $from ORDER BY histo.codepostal;"; 
      $xml->addChild('cp', filtrage($sql));  
      $data = array(); 
    } 
     
    // si le type de produit n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $produit) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.id_produit FROM $from ORDER BY histo.id_produit;"; 
      $xml->addChild('produits', filtrage($sql));  
      $data = array(); 
    } 
     
    // données de la table 
    $sql = <<<SQL 
    SELECT  
    	histo.id_produit,
    	histo.type_produit,
    	histo.ros,
    	histo.client,
    	histo.adresse,
    	histo.ville,
    	histo.codepostal
    FROM  
      $fromAndWhere 
    ORDER BY 
      histo.id_produit ASC,  
      histo.type_produit ASC,  
      histo.ros ASC; 
      histo.client ASC;
      histo.adresse ASC;
      histo.ville ASC;
      histo.codepostal ASC;
    SQL; 
     
     
    $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>{$row['id_produit']}</td> 
      <td>{$row['type_produit']}</td> 
      <td>{$row['ros']}</td> 
      <td>{$row['client']}</td>
      <td>{$row['adresse']}</td> 
      <td>{$row['ville']}</td> 
      <td>{$row['codepostal']}</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(); 
     
    ?>

  9. #49
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Oui, j'ai fait une boulette : ça serait mieux comme ça pour tous les blocs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($row = mysql_fetch_assoc($qry)) {
       $dataClient[] = $row;
    }

  10. #50
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    dans index.php ?

    donc faut modifier en 2 endroits comme cela ?

    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
    <?php
    // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
    // Tu as 4 listes : Raison sociale | ROS | Code postal | Produit
     
    mysql_connect('localhost', 'root', '');
    mysql_select_db('xls_db');
     
    // raison sociale
    $sql = 'SELECT DISTINCT client FROM histo ORDER BY client';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataClient[] = $row;  // à la place de $dataClient[] = $row[];
    }
     
    // ROS
    $sql = 'SELECT DISTINCT ros FROM histo ORDER BY ros';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataRos[] = $row;  // à la place de $dataRos[] = $row[];
    }
     
    // code postal
    $sql = 'SELECT DISTINCT codepostal FROM histo ORDER BY codepostal';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataCp[] = $row;  // à la place de $dataCp[] = $row[];
    }
     
    // produit
    $sql = 'SELECT DISTINCT id_produit FROM histo ORDER BY id_produit';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataProduit[] = $row;  // à la place de $dataProduit[] = $row[];
    }
     
    // historique non filtré
    // produit
    $sql = 'SELECT * FROM histo';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataHisto[] = $row;  // à la place de $dataHisto[] = $row[];
    }
     
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); }
     
    ?>
    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
    <?php
     
      // ICI MODIFIEZ LE PARAMETRAGE 
      // Connexion à la base de données 
      $server = 'localhost'; 
      $user = 'root'; 
      $pwd = ''; 
      $dbName = 'xls_db'; 
      $cnx = mysql_connect($server, $user, $pwd); 
      $db = mysql_select_db($dbName); 
     
      // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
     
      // CLIENTS  
      $sql = 'SELECT DISTINCT histo.client FROM histo ORDER BY histo.client;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataClient[] = $row; // à la place de $dataClient[] = $row[0];
      }   
     
      // ROS
      $sql = 'SELECT DISTINCT histo.ros FROM histo ORDER BY histo.ros;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataRos[] = $row; // à la place de $dataRos[] = $row[0];
      }   
     
      // CODEPOSTAL
      $sql = 'SELECT DISTINCT histo.codepostal FROM histo ORDER BY histo.codepostal;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataCp[] = $row; // à la place de $dataCp[] = $row[0];
      }   
     
      // PRODUITS
      $sql = 'SELECT DISTINCT histo.id_produit FROM histo ORDER BY histo.id_produit;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataProduit[] = $row; // à la place de $dataProduit[] = $row[0];
      }   
     
      // DONNES DE LA TABLE 
      $sql = <<<SQL 
    SELECT histo.id_produit, histo.type_produit, histo.ros, histo.client, histo.adresse, histo.ville, histo.codepostal
    FROM histo  
    ORDER BY 
      histo.id_produit ASC,  
      histo.type_produit ASC,  
      histo.ros ASC; 
      histo.client ASC;
      histo.adresse ASC;
      histo.ville ASC;
      histo.codepostal ASC;
    SQL; 
      $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>
    ?>

  11. #51
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu vas avoir une incohérence :
    dans filterLists.php tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml->addChild('cp', filtrage($sql));
    or dans le code qui récupère les données rafraichies tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((code = $(response).find('cps').text()).length) $('#cps').html(code);
    cp != cps

    Je ne pense pas que cela soit nécessaire dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $fromAndWhere = <<<SQL 
    histo
    $where 
    SQL;
    Tu peux rappatrier ce code directement dans la requête principale.

  12. #52
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    oui effectivement j'ai modifié le "cp" en "cps"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml->addChild('cps', filtrage($sql));
    Qu'est ce que tu entends par "rappatrier ce code directement dans la requête principale" ?

    Ma requète principale c'est celle là :

    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
    // données de la table 
    $sql = <<<SQL 
    SELECT  
    	histo.id_produit,
    	histo.type_produit,
    	histo.ros,
    	histo.client,
    	histo.adresse,
    	histo.ville,
    	histo.codepostal
    FROM  
      $fromAndWhere 
    ORDER BY 
      histo.id_produit ASC,  
      histo.type_produit ASC,  
      histo.ros ASC, 
      histo.client ASC,
      histo.adresse ASC,
      histo.ville ASC,
      histo.codepostal ASC
    SQL;
    Mais du coup à quoi sert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $fromAndWhere = <<<SQL 
    histo
    $where 
    SQL;

  13. #53
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_SL in C:\wamp\www\ROS\Copie de Liste\index.php on line 134

  14. #54
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    J'ai trouvé l'erreur. J'avais laissé trainé des espaces où il ne fallait pas !

    mais maintenant j'en ai encore une autre

    Ma page s'affiche mais j'ai cette erreur dans les listes :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: htmlspecialchars() expects parameter 1 to be string, array given in C:\wamp\www\ROS\Copie de Liste\index.php on line 44

  15. #55
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    ça progesse on dirait, mais il faudrait quand même mettre les mains dans le cambouis à fond.
    2 options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT DISTINCT client FROM histo ORDER BY client';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataClient[] = $row;
    }
    et dans rendu web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- Liste des clients -->
    <label for="clients">Clients</label>
    <select id="clients" onchange="filterLists();">
       <option value=""></option>
       <?php foreach($dataClient as $client): ?>
       <option value="<?php echo $hsc($client['client']); ?>"><?php echo $hsc($client['client']); ?></option>
       <?php endforeach; ?>
    </select>
    Tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT DISTINCT client FROM histo ORDER BY client';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataClient[] = $row['client'];
    }
    Là tu ne touche pas le rendu web. Le message devrait disparaitre.
    Repètes pour toutes les listes.

  16. #56
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    J'ai utilisé la 2e methode ! J'ai compris mon erreur !

    Ensuite j'ai remarqué un soucis. Est ce que les lignes 105 -> 131 sont indispensables ?? Car quand je les enlève il n'y a plus de message d'erreur et je n'ai plus mes listes en double comme dans la capture plus bas. j'ai l'impression qu'on dedouble les requettes entre la partie avant le <html> et cette partie 105 -> 131.

    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
    <?php
    // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
    // Tu as 4 listes : Raison sociale | ROS | Code postal | Produit
     
    mysql_connect('localhost', 'root', '');
    mysql_select_db('xls_db');
     
    // raison sociale
    $sql = 'SELECT DISTINCT client FROM histo ORDER BY client';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataClient[] = $row['client'];  // à la place de $dataClient[] = $row[];
    }
     
    // ROS
    $sql = 'SELECT DISTINCT ros FROM histo ORDER BY ros';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataRos[] = $row['ros'];  // à la place de $dataRos[] = $row[];
    }
     
    // code postal
    $sql = 'SELECT DISTINCT codepostal FROM histo ORDER BY codepostal';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataCp[] = $row['codepostal'];  // à la place de $dataCp[] = $row[];
    }
     
    // produit
    $sql = 'SELECT DISTINCT id_produit FROM histo ORDER BY id_produit';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataProduit[] = $row['id_produit'];  // à la place de $dataProduit[] = $row[];
    }
     
    // historique non filtré
    // produit
    $sql = 'SELECT * FROM histo';
    $qry = mysql_query($sql);
    while($row = mysql_fetch_assoc($qry)) {
       $dataHisto[] = $row;  // à la place de $dataHisto[] = $row[];
    }
     
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); }
     
    ?>
    <!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=ISO-8859-1" />
       <title>Projet ROS</title>
       <script type="application/javascript" charset="ISO-8859-1" 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 client = $('#clients option:selected').val(); 
      var ros = $('#ros option:selected').val(); 
      var cp = $('#cps option:selected').val(); 
      var produit = $('#produits 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: 'client='+client+'&ros='+ros+'&cp='+cp+'&produit='+produit, // 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('clients').text()).length) $('#clients').html(code); 
      if ((code = $(response).find('ros').text()).length) $('#ros').html(code); 
      if ((code = $(response).find('cps').text()).length) $('#cps').html(code); 
      if ((code = $(response).find('produits').text()).length) $('#produits').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'; 
      $pwd = ''; 
      $dbName = 'xls_db'; 
      $cnx = mysql_connect($server, $user, $pwd); 
      $db = mysql_select_db($dbName); 
     
      // Au démarrage, aucune sélection : on extrait toutes les données individuellement pour chaque liste
     
      // CLIENTS  
      $sql = 'SELECT DISTINCT histo.client FROM histo ORDER BY histo.client;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataClient[] = $row[0]; // à la place de $dataClient[] = $row[0];
      }   
     
      // ROS
      $sql = 'SELECT DISTINCT histo.ros FROM histo ORDER BY histo.ros;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataRos[] = $row[0]; // à la place de $dataRos[] = $row[0];
      }   
     
      // CODEPOSTAL
      $sql = 'SELECT DISTINCT histo.codepostal FROM histo ORDER BY histo.codepostal;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataCp[] = $row[0]; // à la place de $dataCp[] = $row[0];
      }   
     
      // PRODUITS
      $sql = 'SELECT DISTINCT histo.id_produit FROM histo ORDER BY histo.id_produit;'; 
      $qry = mysql_query($sql); 
      while($row = mysql_fetch_row($qry)) { 
      $dataProduit[] = $row[0]; // à la place de $dataProduit[] = $row[0];
      }   
     
      // DONNES DE LA TABLE 
      $sql = <<<SQL
    SELECT histo.id_produit, histo.type_produit, histo.ros, histo.client, histo.adresse, histo.ville, histo.codepostal
    FROM histo  
    ORDER BY 
      histo.id_produit ASC,  
      histo.type_produit ASC,  
      histo.ros ASC, 
      histo.client ASC,
      histo.adresse ASC,
      histo.ville ASC,
      histo.codepostal ASC
    SQL;
      $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>
    ?>
       <p><strong>PROJET ROS</strong></p>
       <p>Sélectionnez de un à plusieurs critères de recherche.</p>
       <form id="frmRecherche">
     
        <!-- Liste des clients -->
          <label for="clients">Clients</label>
          <select id="clients" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataClient as $client): ?>
             <option value="<?php echo $hsc($client); ?>"><?php echo $hsc($client); ?></option>
             <?php endforeach; ?>
          </select>
     
        <!-- Liste des ROS-->
          <label for="ros">ROS</label>
          <select id="ros" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataRos as $ros): ?>
             <option value="<?php echo $hsc($ros); ?>"><?php echo $hsc($ros); ?></option>
             <?php endforeach; ?>
          </select>
     
    	<!-- Liste des codes postaux-->
          <label for="cp">Code Postal</label>
          <select id="cp" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataCp as $cp): ?>
             <option value="<?php echo $hsc($cp); ?>"><?php echo $hsc($cp); ?></option>
             <?php endforeach; ?>
          </select>
     
    	<!-- Liste des produits-->
          <label for="produit">Produits</label>
          <select id="produit" onchange="filterLists();">
             <option value=""></option>
             <?php foreach($dataProduit as $produit): ?>
             <option value="<?php echo $hsc($produit); ?>"><?php echo $hsc($produit); ?></option>
             <?php endforeach; ?>
          </select>
     
       </form>
     
       <!-- Données de la table -->
       <table>
          <thead>
             <tr>
                <th>Produit</th>
                <th>Type</th>
                <th>ROS</th>
                <th>Client</th>
                <th>Adresse</th>
                <th>Ville</th>
                <th>CP</th>
             </tr>
          </thead>
          <tbody id="table">
             <?php foreach($dataHisto as $row): ?>
             <tr>
                <td><?php echo $hsc($row['id_produit']); ?></td>
                <td><?php echo $hsc($row['type_produit']); ?></td>
                <td><?php echo $hsc($row['ros']); ?></td>
                <td><?php echo $hsc($row['client']); ?></td>
                <td><?php echo $hsc($row['adresse']); ?></td>
                <td><?php echo $hsc($row['ville']); ?></td>
                <td><?php echo $hsc($row['codepostal']); ?></td>
             </tr>
             <?php endforeach; ?>
          </tbody>
       </table>
    </body>
    </html>



    Dernière chose, les Listes deroulantes ne filtrent rien quand je fais un choix ^^

  17. #57
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bah écoutes je pense que tu peux effectivement les supprimer. Le travail d'extraction des données est déjà fait dès le début du script.
    Ensuite le problème de non rafraichissement après une sélection ne vient pas du script je pense mais de ton navigateur (ie6 je parie, non ?)
    Si c'est ça, essayes avec un navigateur digne de ce nom Firefox par exemple.

  18. #58
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    J'ai supprimé les lignes et effectivement je n'ai plus mes listes en double.

    Effectivement, le navigateur par defaut ici est IE7. Je sais que l'AJAX n'est pas très bien géré par ie7.
    Par contre, j'ai installé Firefox 10 pour tester, mais cela ne marche toujours pas.
    J'ai ouvert la "console Web" pour examiner les erreurs et voila ce que cela me donne :



    J'ai une ligne d'erreur à chaques changement de selection dans n'importe quelle liste.



    Le code source généré de ma page :

    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
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    <!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=ISO-8859-1" />
       <title>Projet ROS</title>
       <script type="application/javascript" charset="ISO-8859-1" 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 client = $('#clients option:selected').val(); 
      var ros = $('#ros option:selected').val(); 
      var cp = $('#cps option:selected').val(); 
      var produit = $('#produits 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: 'client='+client+'&ros='+ros+'&cp='+cp+'&produit='+produit, // 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('clients').text()).length) $('#clients').html(code); 
      if ((code = $(response).find('ros').text()).length) $('#ros').html(code); 
      if ((code = $(response).find('cps').text()).length) $('#cps').html(code); 
      if ((code = $(response).find('produits').text()).length) $('#produits').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>
       <p><strong>PROJET ROS</strong></p>
       <p>Sélectionnez de un à plusieurs critères de recherche.</p>
       <form id="frmRecherche">
     
        <!-- Liste des clients -->
          <label for="clients">Clients</label>
          <select id="clients" onchange="filterLists();">
     
             <option value=""></option>
                      <option value="BRASSERIE FISCHER">BRASSERIE FISCHER</option>
                      <option value="CAISSE REG CREDIT AGRIC MUT NORD FR">CAISSE REG CREDIT AGRIC MUT NORD FR</option>
                      <option value="DDE ARDENNES">DDE ARDENNES</option>
                      <option value="ECOLE HAUTES ETUDES COMMERCIALES NO">ECOLE HAUTES ETUDES COMMERCIALES NO</option>
                      <option value="L'UNION">L'UNION</option>
     
                      <option value="MUTUALITE DE COTE D'OR">MUTUALITE DE COTE D'OR</option>
                      <option value="SNVB">SNVB</option>
                      <option value="SOCIETE TRANSPAC">SOCIETE TRANSPAC</option>
                      <option value="URSSAF DE BESANCON">URSSAF DE BESANCON</option>
                      <option value="URSSAF DE LA MOSELLE">URSSAF DE LA MOSELLE</option>
                      <option value="VERRERIES DE MASNIERES">VERRERIES DE MASNIERES</option>
     
                   </select>
     
        <!-- Liste des ROS-->
          <label for="ros">ROS</label>
          <select id="ros" onchange="filterLists();">
             <option value=""></option>
                      <option value="Denis DEFFUNT">Denis DEFFUNT</option>
                      <option value="Jacques HUET">Jacques HUET</option>
     
                      <option value="Michel LESCURE">Michel LESCURE</option>
                      <option value="OLIVIER GRANDTENER">OLIVIER GRANDTENER</option>
                      <option value="Paul CHOULET">Paul CHOULET</option>
                      <option value="Philippe MARZIN">Philippe MARZIN</option>
                      <option value="RÉGIS BUNY">RÉGIS BUNY</option>
                      <option value="ROGER LAVISSE">ROGER LAVISSE</option>
     
                   </select>
     
    	<!-- Liste des codes postaux-->
          <label for="cp">Code Postal</label>
          <select id="cp" onchange="filterLists();">
             <option value=""></option>
                      <option value="8000">8000</option>
                      <option value="21000">21000</option>
     
                      <option value="25000">25000</option>
                      <option value="51100">51100</option>
                      <option value="54520">54520</option>
                      <option value="57000">57000</option>
                      <option value="59000">59000</option>
                      <option value="59241">59241</option>
     
                      <option value="59650">59650</option>
                      <option value="59800">59800</option>
                      <option value="67300">67300</option>
                   </select>
     
    	<!-- Liste des produits-->
          <label for="produit">Produits</label>
          <select id="produit" onchange="filterLists();">
     
             <option value=""></option>
                      <option value="0000ELH3">0000ELH3</option>
                      <option value="0000FVA9">0000FVA9</option>
                      <option value="0000HFN2">0000HFN2</option>
                      <option value="0000JLU8">0000JLU8</option>
                      <option value="0000KXT8">0000KXT8</option>
     
                      <option value="0000LPE0">0000LPE0</option>
                      <option value="0000SWA0">0000SWA0</option>
                      <option value="0001FER6">0001FER6</option>
                      <option value="0001GPA0">0001GPA0</option>
                      <option value="0001GPA4">0001GPA4</option>
                      <option value="0001HMT8">0001HMT8</option>
     
                      <option value="0001HNR2">0001HNR2</option>
                      <option value="0001KYA3">0001KYA3</option>
                      <option value="0001VXD6">0001VXD6</option>
                   </select>
     
       </form>
     
       <!-- Données de la table -->
       <table>
     
          <thead>
             <tr>
                <th>Produit</th>
                <th>Type</th>
                <th>ROS</th>
                <th>Client</th>
                <th>Adresse</th>
     
                <th>Ville</th>
                <th>CP</th>
             </tr>
          </thead>
          <tbody id="table">
                      <tr>
                <td>0000ELH3</td>
     
                <td>Liaison Fast Ethernet PàP Local Ethernet</td>
                <td>Jacques HUET</td>
                <td>ECOLE HAUTES ETUDES COMMERCIALES NO</td>
                <td>58 RUE DU PORT</td>
                <td>LILLE</td>
                <td>59800</td>
     
             </tr>
                      <tr>
                <td>0000FVA9</td>
                <td>CE2O Feuille DSLAM création :</td>
                <td>Jacques HUET</td>
                <td>VERRERIES DE MASNIERES</td>
                <td>ROUTE NATIONALE</td>
     
                <td>MASNIERES</td>
                <td>59241</td>
             </tr>
                      <tr>
                <td>0000HFN2</td>
                <td>Liaison Fast Ethernet PàP Local Ethernet</td>
                <td>OLIVIER GRANDTENER</td>
     
                <td>L'UNION</td>
                <td>5 RUE DE TALLEYRAND</td>
                <td>REIMS</td>
                <td>51100</td>
             </tr>
                      <tr>
     
                <td>0000JLU8</td>
                <td>LOCAL ETH Pt Pt IDF création :</td>
                <td>Jacques HUET</td>
                <td>SOCIETE TRANSPAC</td>
                <td>65 RUE FAIDHERBE</td>
                <td>VILLENEUVE D'ASCQ</td>
     
                <td>59650</td>
             </tr>
                      <tr>
                <td>0000KXT8</td>
                <td>Liaison Ethernet branche Local Ethernet</td>
                <td>Paul CHOULET</td>
                <td>MUTUALITE DE COTE D'OR</td>
     
                <td>16 BD DE SEVIGNE</td>
                <td>DIJON</td>
                <td>21000</td>
             </tr>
                      <tr>
                <td>0000LPE0</td>
                <td>Liaison Fast Ethernet PàP Local Ethernet</td>
     
                <td>RÉGIS BUNY</td>
                <td>SNVB</td>
                <td>2 RUE DE LA VOLOGNE</td>
                <td>LAXOU</td>
                <td>54520</td>
             </tr>
     
                      <tr>
                <td>0000SWA0</td>
                <td>Liaison Ethernet pt à pt Local Ethernet</td>
                <td>Philippe MARZIN</td>
                <td>BRASSERIE FISCHER</td>
                <td>7 RTE BISCHWILLER</td>
     
                <td>SCHILTIGHEIM</td>
                <td>67300</td>
             </tr>
                      <tr>
                <td>0001FER6</td>
                <td>Liaison Giga Ethernet PàP Local Ethernet</td>
                <td>Philippe MARZIN</td>
     
                <td>BRASSERIE FISCHER</td>
                <td>7 RTE BISCHWILLER</td>
                <td>SCHILTIGHEIM</td>
                <td>67300</td>
             </tr>
                      <tr>
                <td>0001GPA0</td>
     
                <td>Liaison Ethernet MPT Local Ethernet</td>
                <td>OLIVIER GRANDTENER</td>
                <td>DDE ARDENNES</td>
                <td>CHE GRANGES MOULUES</td>
                <td>CHARLEVILLE MEZIERES</td>
                <td>8000</td>
     
             </tr>
                      <tr>
                <td>0001GPA4</td>
                <td>Liaison Ethernet branche Local Ethernet</td>
                <td>OLIVIER GRANDTENER</td>
                <td>DDE ARDENNES</td>
                <td>CHE GRANGES MOULUES</td>
     
                <td>CHARLEVILLE MEZIERES</td>
                <td>8000</td>
             </tr>
                      <tr>
                <td>0001HMT8</td>
                <td>LOCAL ETHERNET résiliation : P</td>
                <td>Philippe MARZIN</td>
     
                <td>URSSAF DE BESANCON</td>
                <td>2 DENIS PAPIN</td>
                <td>BESANCON</td>
                <td>25000</td>
             </tr>
                      <tr>
                <td>0001HNR2</td>
     
                <td>Liaison Ethernet pt à pt Local Ethernet</td>
                <td>ROGER LAVISSE</td>
                <td>URSSAF DE LA MOSELLE</td>
                <td>   6  R PASTEUR</td>
                <td>METZ</td>
                <td>57000</td>
     
             </tr>
                      <tr>
                <td>0001KYA3</td>
                <td>Liaison Fast Ethernet PàP Local Ethernet</td>
                <td>Michel LESCURE</td>
                <td>CAISSE REG CREDIT AGRIC MUT NORD FR</td>
                <td>10 AVE FOCH</td>
     
                <td>LILLE</td>
                <td>59000</td>
             </tr>
                      <tr>
                <td>0001VXD6</td>
                <td>Liaison Ethernet pt à pt Local Ethernet</td>
                <td>Denis DEFFUNT</td>
     
                <td>SOCIETE TRANSPAC</td>
                <td>100 AVE ANDRE MALRAUX</td>
                <td>METZ</td>
                <td>57000</td>
             </tr>
                   </tbody>
       </table>
     
    </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
    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
    <?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 
    $client = NULL; 
    $ros = NULL; 
    $cp = NULL; 
    $produit = 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>  
     *  <clients></clients>  
     *  <ros></ros>  
     *  <cps></cps>  
     *  <produits></produits>  
     *  <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 
     
    // client 
    if (isset($_POST['clients']) && (ctype_digit("{$_POST['clients']}"))) { 
      $client = $_POST['clients']; 
      $where[] = 'histo.client = ' . intval($client); 
    } 
     
    // ros 
    if (isset($_POST['ros']) && (ctype_digit("{$_POST['ros']}"))) { 
      $ros = $_POST['ros']; 
      $where[] = 'histo.ros = ' . intval($ros); 
    } 
     
    // cp 
    if (isset($_POST['cp']) && (ctype_digit("{$_POST['cp']}"))) { 
      $cp = $_POST['cp']; 
      $where[] = 'histo.codepostal = ' . intval($cp); 
    } 
     
    // produit 
    if (isset($_POST['produit']) && (ctype_digit("{$_POST['produit']}"))) { 
      $produit = $_POST['produit']; 
      $where[] = 'histo.id_produit = ' . intval($produit); 
    } 
     
    ### 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'; 
    $pwd = ''; 
    $dbName = 'xls_db'; 
    $cnx = mysql_connect($server, $user, $pwd); 
    $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 = <<<SQL
    histo
    $where 
    SQL;
     
    /** 
     * Crée le code HTML pour les listes 
     * @param mixed $sql 
     * @return string 
     */ 
    function filtrage($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) ? 'histo' : $fromAndWhere; 
     
    // si le client n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $client) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.client FROM $from ORDER BY histo.client;"; 
      $xml->addChild('clients', filtrage($sql));  
      $data = array(); 
    } 
     
    // si le ros n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $ros) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.ros FROM $from ORDER BY histo.ros;"; 
      $xml->addChild('ros', filtrage($sql));  
      $data = array(); 
    } 
     
    // si le Code postal n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $cp) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.codepostal FROM $from ORDER BY histo.codepostal;"; 
      $xml->addChild('cps', filtrage($sql));  
      $data = array(); 
    } 
     
    // si le type de produit n'a pas déjà été sélectionnée -> filtrage de la liste 
    if (NULL === $produit) { 
      // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php) 
      $from = (NULL === $where) ? 'histo' : $fromAndWhere; 
      $sql = "SELECT DISTINCT histo.id_produit FROM $from ORDER BY histo.id_produit;"; 
      $xml->addChild('produits', filtrage($sql));  
      $data = array(); 
    } 
     
    // données de la table 
    $sql = <<<SQL
    SELECT  
    	histo.id_produit,
    	histo.type_produit,
    	histo.ros,
    	histo.client,
    	histo.adresse,
    	histo.ville,
    	histo.codepostal
    FROM  
      $fromAndWhere 
    ORDER BY 
      histo.codepostal ASC,
      histo.id_produit ASC,  
      histo.type_produit ASC,  
      histo.ros ASC, 
      histo.client ASC,
      histo.adresse ASC,
      histo.ville ASC
    SQL;
     
    $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>{$row['id_produit']}</td> 
      <td>{$row['type_produit']}</td> 
      <td>{$row['ros']}</td> 
      <td>{$row['client']}</td>
      <td>{$row['adresse']}</td> 
      <td>{$row['ville']}</td> 
      <td>{$row['codepostal']}</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(); 
    ?>

  19. #59
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Bon, tes identifiants sont des valeurs textes et pas des id numériques donc il faut les protéger avant :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    data: 'client='+encodeURIComponent(client)+'&ros='+encodeURIComponent(ros)+'&cp='+encodeURIComponent(cp)+'&produit='+encodeURIComponent(produit)
    Mon tuto est basé sur des id numériques et pas textes donc tu aurais dû adapter le code en conséquence.
    J'ai repris le code filterLists.php en tenant compte des textes, compares et tu verras toutes les différences :
    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
    <?php
     
    // Ce script est appelé à chaque sélection d'un élément d'une liste
     
    // suivi du critère
    $where = array();
     
    // données sélectionnées => filtres
    $client = null;
    $ros = null;
    $cp = null;
    $produit = null;
     
    // ICI MODIFIEZ LE PARAMETRAGE
    // Connexion à la base de données
    $server = 'localhost';
    $user = 'root';
    $pwd = '';
    $dbName = 'xls_db';
    $cnx = mysql_connect($server, $user, $pwd);
    $db = mysql_select_db($dbName);
     
    /**
     * 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>
     *  <clients></clients>
     *  <ros></ros>
     *  <cps></cps>
     *  <produits></produits>
     *  <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
     
    // client
    if (isset($_POST['clients']) && (strlen("{$_POST['clients']}"))) {
      $client = $_POST['clients'];
      $where[] = "histo.client = '".mysql_real_escape_string($client)."'";
    }
     
    // ros
    if (isset($_POST['ros']) && (strlen("{$_POST['ros']}"))) {
      $ros = $_POST['ros'];
      $where[] = "histo.ros = '".mysql_real_escape_string($ros)."'";
    }
     
    // cp
    if (isset($_POST['cp']) && (strlen("{$_POST['cp']}"))) {
      $cp = $_POST['cp'];
      $where[] = "histo.codepostal = '".mysql_real_escape_string($cp)."'";
    }
     
    // produit
    if (isset($_POST['produit']) && (strlen("{$_POST['produit']}"))) {
      $produit = $_POST['produit'];
      $where[] = "histo.id_produit = '".mysql_real_escape_string($produit)."'";
    }
     
    ### FILTRAGE DES DONNÉES DES LISTES (SSI RIEN N'A DÉJÀ ÉTÉ SÉLECTIONNÉ)
    $where = ( ! empty($where)) ? 'WHERE '.implode(' AND ', $where) : null;
     
    // 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 = <<<SQL
    histo
    $where
    SQL;
     
    /**
     * Crée le code HTML pour les listes
     * @param mixed $sql
     * @return string
     */
    function filtrage($sql) {
       $data = array();
       $qry = mysql_query($sql);
       $data[] = '<option value=""></option>'; // ligne vide
       while($row = mysql_fetch_row($qry)) {
          $str = htmlspecialchars($row[0], ENT_QUOTES);
          $data[] = '<option value="'.$str.'">'.$str.'</option>';
       }
       return implode("\n", $data);
    }
     
    // si le client n'a pas déjà été sélectionnée -> filtrage de la liste
    if (null === $client) {
       // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
       $from = (empty($where)) ? 'histo' : $fromAndWhere;
       $sql = "SELECT DISTINCT histo.client FROM $from ORDER BY histo.client;";
       $xml->addChild('clients', filtrage($sql));
    }
     
    // si le ros n'a pas déjà été sélectionnée -> filtrage de la liste
    if (null === $ros) {
       // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
       $from = (empty($where)) ? 'histo' : $fromAndWhere;
       $sql = "SELECT DISTINCT histo.ros FROM $from ORDER BY histo.ros;";
       $xml->addChild('ros', filtrage($sql));
    }
     
    // si le Code postal n'a pas déjà été sélectionnée -> filtrage de la liste
    if (null === $cp) {
       // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
       $from = (empty($where)) ? 'histo' : $fromAndWhere;
       $sql = "SELECT DISTINCT histo.codepostal FROM $from ORDER BY histo.codepostal;";
       $xml->addChild('cps', filtrage($sql));
    }
     
    // si le type de produit n'a pas déjà été sélectionnée -> filtrage de la liste
    if (null === $produit) {
       // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
       $from = (empty($where)) ? 'histo' : $fromAndWhere;
       $sql = "SELECT DISTINCT histo.id_produit FROM $from ORDER BY histo.id_produit;";
       $xml->addChild('produits', filtrage($sql));
    }
     
    // données de la table
    $sql = <<<SQL
    SELECT
       histo.id_produit,
       histo.type_produit,
       histo.ros,
       histo.client,
       histo.adresse,
       histo.ville,
       histo.codepostal
    FROM
      $fromAndWhere
    ORDER BY
      histo.codepostal ASC,
      histo.id_produit ASC,
      histo.type_produit ASC,
      histo.ros ASC,
      histo.client ASC,
      histo.adresse ASC,
      histo.ville ASC
    SQL;
     
    $hsc  = function($p) { return htmlspecialchars($p, ENT_QUOTES); };
    $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>{$hsc($row['id_produit'])}</td>
      <td>{$hsc($row['type_produit'])}</td>
      <td>{$hsc($row['ros'])}</td>
      <td>{$hsc($row['client'])}</td>
      <td>{$hsc($row['adresse'])}</td>
      <td>{$hsc($row['ville'])}</td>
      <td>{$hsc($row['codepostal'])}</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();
    ?>
    @plus

  20. #60
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Je viens d'essayer ton code. Cela ne marche toujours pas j'ai maintenant une autre erreur .



    J'ai aussi essayé de comprendre un peu ta modification.

    Je ne comprends pas pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    encodeURIComponent(client)
    ni pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // client
    if (isset($_POST['clients']) && (strlen("{$_POST['clients']}"))) {
      $client = $_POST['clients'];
      $where[] = "histo.client = '".mysql_real_escape_string($client)."'";
    }
    Je me renseigne en parallèle sur ces fonctions pour connaitre leurs fonctions ! (ça fait beaucoup de fonction tiens !)

Discussions similaires

  1. [AJAX] Filtre tableau par liste deroulante
    Par stevenP dans le forum AJAX
    Réponses: 1
    Dernier message: 22/12/2011, 12h00
  2. Réponses: 9
    Dernier message: 07/08/2007, 14h36
  3. filtre par liste deroulante
    Par Flo4594 dans le forum IHM
    Réponses: 2
    Dernier message: 08/12/2006, 08h51
  4. Texte affiché par liste deroulante
    Par dynxd dans le forum Access
    Réponses: 20
    Dernier message: 30/09/2005, 21h37

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