IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Listes déroulante Ajax


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Par défaut Listes déroulante Ajax
    Bonjour,

    Je suis actuellement ce tutoriel . L’idée principale est de mettre à jour le contenu des listes de sélection non encore sélectionnées en fonction des critères des listes voisines déjà sélectionnées.
    Au démarrage chaque liste contient toutes les données possibles et le filtrage commence dès la première sélection.
    Il doit être possible de retirer un critère de filtrage en ne sélectionnant aucune donnée de la liste. Le retrait du critère est matérialisé par une ligne vide au début de chaque liste.
    A chaque sélection, les données répondant aux critères doivent être immédiatement affichées; ce qui n'est pas le cas ici.

    J'ai copier/coller le code tel quel en modifiant dans l'index.php car il y avait une erreur d'exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // DONNES DE LA TABLE 
          $sql = <<<SQL 
    SELECT t_ville.ville, t_session.date_, t_matiere.matiere, t_session_matiere.nbInscrit 
    FROM 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 
    ORDER BY 
       t_ville.ville ASC,  
       t_session.date_ DESC,  
       t_matiere.matiere ASC; 
    SQL;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // DONNES DE LA TABLE 
          $sql = "
    SELECT t_ville.ville, t_session.date_, t_matiere.matiere, t_session_matiere.nbInscrit 
    FROM 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 
    ORDER BY 
       t_ville.ville ASC,  
       t_session.date_ DESC,  
       t_matiere.matiere ASC"; 
    SQL;
    Je suppose que cela provient de la partie Ajax de l'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
    <!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>Listes liées</title> 
       <link rel="stylesheet" type="text/css" href="my.css"> 
       <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 jour    = $('#jours option:selected').val(); 
             var mois    = $('#mois option:selected').val(); 
             var annee   = $('#annees option:selected').val(); 
             var ville   = $('#villes option:selected').val(); 
             var matiere = $('#matieres 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: 'jour='+jour+'&mois='+mois+'&annee='+annee+'&ville='+ville+'&matiere='+matiere,   // 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('jours').text()).length)    $('#jours').html(code); 
                   if ((code = $(response).find('mois').text()).length)     $('#mois').html(code); 
                   if ((code = $(response).find('annees').text()).length)   $('#annees').html(code); 
                   if ((code = $(response).find('villes').text()).length)   $('#villes').html(code); 
                   if ((code = $(response).find('matieres').text()).length) $('#matieres').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 = 'test.mysql.db'; 
          $user   = 'test'; 
          $pwd    = ''; 
          $dbName = 'test'; 
          $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 
     
          // JOURS 
          $sql = 'SELECT DISTINCT DAY(t_session.date_) FROM t_session ORDER BY DAY(t_session.date_);'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $jours[] = $row[0]; 
          } 
     
          // MOIS 
          $sql = 'SELECT DISTINCT MONTH(t_session.date_) FROM t_session ORDER BY MONTH(t_session.date_);'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $mois[] = $row[0]; 
          } 
     
          // ANNEES 
          $sql = 'SELECT DISTINCT YEAR(t_session.date_) FROM t_session ORDER BY YEAR(t_session.date_);'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $annees[] = $row[0]; 
          } 
     
          // VILLES 
          $sql = 'SELECT DISTINCT t_ville.idVille, t_ville.ville FROM t_ville ORDER BY t_ville.ville;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $villes[$row[0]] = $row[1]; 
          } 
     
          // MATIERES 
          $sql = 'SELECT DISTINCT t_matiere.idMatiere, t_matiere.matiere FROM t_matiere ORDER BY t_matiere.matiere;'; 
          $qry = mysql_query($sql); 
          while($row = mysql_fetch_row($qry)) { 
             $matieres[$row[0]] = $row[1]; 
          } 
        //Données table
        $sql = "
    SELECT t_ville.ville, t_session.date_, t_matiere.matiere, t_session_matiere.nbInscrit 
    FROM 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 
    ORDER BY 
       t_ville.ville ASC,  
       t_session.date_ DESC,  
       t_matiere.matiere 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>SESSIONS D'EXAMENS</strong></p> 
       <p>Sélectionnez de un à plusieurs critères de recherche.</p> 
       <form id="frmRecherche"> 
     
          <!-- Liste des jours --> 
          <label for="jours">Jours</label> 
          <select id="jours" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($jours as $jour): ?> 
             <option value="<?php echo $jour; ?>"><?php echo $jour; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
          <!-- Liste des mois --> 
          <label for="mois">Mois</label> 
          <select id="mois" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($mois as $unMois): ?> 
             <option value="<?php echo $unMois; ?>"><?php echo $unMois; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
          <!-- Liste des années --> 
          <label for="annees">Années</label> 
          <select id="annees" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($annees as $annee): ?> 
             <option value="<?php echo $annee; ?>"><?php echo $annee; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
          <!-- Liste des villes --> 
          <label for="villes">Villes</label> 
          <select id="villes" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($villes as $id => $ville): ?> 
             <option value="<?php echo $id; ?>"><?php echo $ville; ?></option> 
             <?php endforeach; ?> 
          </select> 
     
          <!-- Liste des matières --> 
          <label for="matieres">Matières</label> 
          <select id="matieres" onchange="filterLists();"> 
             <option value=""></option> 
             <?php foreach($matieres as $id => $matiere): ?> 
             <option value="<?php echo $id; ?>"><?php echo $matiere; ?></option> 
             <?php endforeach; ?> 
          </select> 
       </form> 
     
       <!-- Données de la table --> 
       <table> 
          <thead> 
             <tr> 
                <th>VILLES</th> 
                <th>DATES</th> 
                <th>MATIERES</th> 
                <th>NB Inscrits</th> 
             </tr> 
          </thead> 
     
          <tbody id="table"> 
          <?php foreach($data as $row): ?> 
             <tr> 
                <td><?php echo $row['ville']; ?></td> 
                <td class="alignc"><?php echo $row['date_']; ?></td> 
                <td><?php echo $row['matiere']; ?></td> 
                <td class="alignr"><?php echo $row['nbInscrit']; ?></td> 
             </tr> 
          <?php endforeach; ?> 
          </tbody> 
       </table> 
    </body> 
    </html>
    filterList.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
    <?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 
    $jour    = NULL; 
    $mois    = NULL; 
    $annee   = NULL; 
    $ville   = NULL; 
    $matiere = NULL; 
     
    /** 
     * CE SCRIPT ANALYSE LES SELECTIONS ET RENVOIE DES DONNEES AU FORMAT XML  
     * La structure correspond à ce que jQuery attend pour mettre à jour la page 
     * <?xml version="1.0" encoding="utf-8"?>  
     *    <xml>  
     *    <jours></jours>  
     *    <mois></mois>  
     *    <annees></annees>  
     *    <villes></villes>  
     *    <matieres></matieres>  
     *    <table></table>  
     * </xml>  
     * 
     * @var SimpleXMLElement 
     */ 
    $xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><xml></xml>'); 
     
    // on parcourt le tableau $_POST et on vérifie quelles sont les listes qui ont une sélection 
     
    // jour 
    if (isset($_POST['jour']) && (ctype_digit("{$_POST['jour']}"))) { 
       $jour = $_POST['jour']; 
       $where[] = 'DAY(t_session.date_) = ' . intval($jour); 
    } 
     
    //mois 
    if (isset($_POST['mois']) && (ctype_digit("{$_POST['mois']}"))) { 
       $mois = $_POST['mois']; 
       $where[] = 'MONTH(t_session.date_) = ' . intval($mois); 
    } 
     
    // année 
    if (isset($_POST['annee']) && (ctype_digit("{$_POST['annee']}"))) { 
       $annee = $_POST['annee']; 
       $where[] = 'YEAR(t_session.date_) = ' . intval($annee); 
    } 
     
    // villes 
    if (isset($_POST['ville']) && (ctype_digit("{$_POST['ville']}"))) { 
       $ville = $_POST['ville']; 
       $where[] = 't_session.idVille = ' . intval($ville); 
    } 
     
    // matière 
    if (isset($_POST['matiere']) && (ctype_digit("{$_POST['matiere']}"))) { 
       $matiere = $_POST['matiere']; 
       $where[] = 't_session_matiere.idMatiere = ' . intval($matiere); 
    } 
     
    ### 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 = 'test.mysql.db'; 
    $user   = 'test'; 
    $pwd    = ''; 
    $dbName = 'testl'; 
    $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 
    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(); 
     
    ?>
    MERCI à rowsrc pour le code c'est exactement ce que je cherchais.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    regardez dans la console de développement, il y a une erreur dans le code PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Par défaut
    Bonjour,
    Et merci
    C'est l'Erreur 310 (net::ERR_TOO_MANY_REDIRECTS) : Trop de redirections
    J'ai modifié l'url mais rien se passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url: 'RechercheTable/filterLists.php',

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    quand je teste à l'adresse suivante, je ne vois pas cette erreur :
    http://www.testdrupal.fr/RechercheTable/

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Par défaut
    Bonjour,

    C'est parce que j'essai de modifier le fichier index

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Par défaut
    Bonjour,

    J'ai remis le code comme à l'origine du tutoriel.
    J'ai installé Firebug (firefox) si je clique sur la liste déroulante et que je choisis une ville voici ce que j'ai dans la console...
    J'ai ceci :reponse :
    <br />
    <b>Parse error</b>: syntax error, unexpected T_SL in <b>/home/testdrup/www/RechercheTable/filterLists
    .php</b> on line <b>80</b><br />
    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
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    <?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 
    $jour    = NULL; 
    $mois    = NULL; 
    $annee   = NULL; 
    $ville   = NULL; 
    $matiere = NULL; 
     
    /** 
     * CE SCRIPT ANALYSE LES SELECTIONS ET RENVOIE DES DONNEES AU FORMAT XML  
     * La structure correspond à ce que jQuery attend pour mettre à jour la page 
     * <?xml version="1.0" encoding="utf-8"?>  
     *    <xml>  
     *    <jours></jours>  
     *    <mois></mois>  
     *    <annees></annees>  
     *    <villes></villes>  
     *    <matieres></matieres>  
     *    <table></table>  
     * </xml>  
     * 
     * @var SimpleXMLElement 
     */ 
    $xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><xml></xml>'); 
     
    // on parcourt le tableau $_POST et on vérifie quelles sont les listes qui ont une sélection 
     
    // jour 
    if (isset($_POST['jour']) && (ctype_digit("{$_POST['jour']}"))) { 
       $jour = $_POST['jour']; 
       $where[] = 'DAY(t_session.date_) = ' . intval($jour); 
    } 
     
    //mois 
    if (isset($_POST['mois']) && (ctype_digit("{$_POST['mois']}"))) { 
       $mois = $_POST['mois']; 
       $where[] = 'MONTH(t_session.date_) = ' . intval($mois); 
    } 
     
    // année 
    if (isset($_POST['annee']) && (ctype_digit("{$_POST['annee']}"))) { 
       $annee = $_POST['annee']; 
       $where[] = 'YEAR(t_session.date_) = ' . intval($annee); 
    } 
     
    // villes 
    if (isset($_POST['ville']) && (ctype_digit("{$_POST['ville']}"))) { 
       $ville = $_POST['ville']; 
       $where[] = 't_session.idVille = ' . intval($ville); 
    } 
     
    // matière 
    if (isset($_POST['matiere']) && (ctype_digit("{$_POST['matiere']}"))) { 
       $matiere = $_POST['matiere']; 
       $where[] = 't_session_matiere.idMatiere = ' . intval($matiere); 
    } 
     
    ### FILTRAGE DES DONNÉES DES LISTES (SI 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 = 'testdrupal.mysql.db'; 
    $user   = 'testl'; 
    $pwd    = 'mdp'; 
    $dbName = 'testdrupal'; 
    $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 
    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(); 
     
    ?>

  7. #7
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    l'erreur vient de l'espace à enlever après "<<<SQL"

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Par défaut
    Salut Mathieu,

    Ok, oui c'est bien au niveau de la requête qu'il y a un problème . Si j'enlève l'espace après "<<<SQL" tout le reste du code est vert; du coup pour la ligne suivante où on envoie la requête "mysql_query" il m'affiche une erreur donc j'ai rechercher et j'ai trouver ceci concernant la Syntaxe Heredoc. Je testerai ce soir. Merci

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Par défaut
    Ok ça fonctionne; en effet il faut éviter les espaces après <<<SQL et SQL;
    Merci pour votre attention, passez une bonne soirée.

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

Discussions similaires

  1. [AJAX] Liste déroulante Ajax
    Par Lady yvi dans le forum AJAX
    Réponses: 1
    Dernier message: 01/06/2009, 16h08
  2. Framework d'une liste déroulante ajax
    Par dilson92 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 10/12/2008, 13h36
  3. [AJAX] liste déroulante ajax
    Par noarno dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/10/2008, 11h53
  4. [Prototype] Liste déroulante AJAX
    Par G.Hammond dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 01/05/2008, 17h20
  5. [AJAX] 3 listes déroulantes ajax
    Par neoboy dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2007, 15h38

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