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 :

Listes Liées PHP/Jquery avec PDO [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Par défaut Listes Liées PHP/Jquery avec PDO
    Bonjour,

    Tout nouveau sur le forum, je me suis inspiré du code présenté de cette discussion : http://www.developpez.net/forums/d12...es-php-jquery/ et ai tenté de l'adapter à mon projet avec le méthode PDO.
    Mon appli est très basique, il s'agit d'un un suivi de dossier en affichage web.
    Une seule table pour le moment dans ma bdd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     num_etude / type_etude / nom_client / ville_client / zone_etude / demand_client / offre_etude / rorx_etude / ui_etude
    Mon but est d'afficher toutes ma base afin d'avoir une vue globale et ensuite des filtres en haut de colonne pour affiner l'affichage.
    Voici mon code

    index.php (affichage globale)
    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
    <!DOCTYPE html>
    <html>
    	<head> 
     
    	</head>
    	<body>	
     
     
    			<?php
                 $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
     
     
    			    $num_etude = array();
    				$type_etude = array();
    				$nom_client = array();
    				$ville_client = array();
    				$zone_etude = array();
    				$demand_client = array();
    				$offre_etude = array();
    				$rorx_etude = array();
    				$ui_etude = array();
    				$table = array();
     
    			//Liste numero etude
    			$querytypes = $bdd->query('SELECT num_etude from etude ORDER BY num_etude ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$num_etude[$row[0]] = $row[0];
    			}
     
    			//Liste type etude
    			$querytypes = $bdd->query('SELECT type_etude from etude ORDER BY type_etude ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$type_etude[$row[0]] = $row[0];
    			}
     
    			//liste nom client
    			$querytypes = $bdd->query('SELECT nom_client from etude ORDER BY nom_client ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$nom_client[$row[0]] = $row[0];
    			}
     
    			//liste ville client
    			$querytypes = $bdd->query('SELECT ville_client from etude ORDER BY ville_client ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$ville_client[$row[0]] = $row[0];
    			}
     
    			//liste zone etude
    			$querytypes = $bdd->query('SELECT zone_etude from etude ORDER BY zone_etude ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$zone_etude[$row[0]] = $row[0];
    			}
     
    			//liste demandeur etude
    			$querytypes = $bdd->query('SELECT demand_client from etude ORDER BY demand_client ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$demand_client[$row[0]] = $row[0];
    			}
     
    			//liste des offres
    			$querytypes = $bdd->query('SELECT offre_etude from etude ORDER BY offre_etude ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$offre_etude[$row[0]] = $row[0];
    			}
     
    			//liste des rorx
    			$querytypes = $bdd->query('SELECT rorx_etude from etude ORDER BY rorx_etude ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$rorx_etude[$row[0]] = $row[0];
    			}
     
    			//liste des POI
    			$querytypes = $bdd->query('SELECT ui_etude from etude ORDER BY ui_etude ASC');
    			while ($row = $querytypes->fetch(PDO::FETCH_NUM))
    			{
    				$ui_etude[$row[0]] = $row[0];
    			}
     
    			$querytable = $bdd->query('SELECT * from etude ORDER BY arriv_etude ASC');
    			while($row = $querytable->fetch(PDO::FETCH_ASSOC)){
    				$data[] = $row;
    			}
     
    			$req = $bdd->query('SELECT * from etude ORDER BY arriv_etude ASC');
    			?>
     
    			<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 num_etude = $('#num_etude option:selected').val();
    				var type_etude = $('#type_etude option:selected').val();
    				var nom_client = $('#nom_client option:selected').val();
    				var ville_client = $('#ville_client option:selected').val();
    				var zone_etude = $('#zone_etude option:selected').val();
    				var demand_client = $('#demand_client option:selected').val();
    				var offre_etude = $('#offre_etude option:selected').val();
    				var rorx_etude = $('#rorx_etude option:selected').val();
    				var ui_etude = $('#ui_etude 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: 'num_etude='+num_etude+'&type_etude'+type_etude+'&nom_client'+nom_client+'&ville_client'+ville_client+'&zone_etude'+zone_etude+'&demand_client'+demand_client+'&offre_etude'+offre_etude+'&rorx_etude'+rorx_etude+'&ui_etude'+ui_etude, // 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('num_etude').text()).length) $('#num_etude').html(code);
    						if ((code = $(response).find('type_etude').text()).length) $('#type_etude').html(code);
    						if ((code = $(response).find('nom_client').text()).length) $('#nom_client').html(code);
    						if ((code = $(response).find('ville_client').text()).length) $('#ville_client').html(code);
    						if ((code = $(response).find('zone_etude').text()).length) $('#zone_etude').html(code);
    						if ((code = $(response).find('demand_client').text()).length) $('#demand_client').html(code);
    						if ((code = $(response).find('offre_etude').text()).length) $('#offre_etude').html(code);
    						if ((code = $(response).find('rorx_etude').text()).length) $('#rorx_etude').html(code);
    						if ((code = $(response).find('ui_etude').text()).length) $('#ui_etude').html(code);
    						// ICI TU AS OUBLIE DE METTRE A JOUR TA TABLE
    						if ((code = $(response).find('table').text()).length) $('#table').html(code);
    						}
    					});
    			}
    			</script>
    			<style type="text/css">
    				body { font-family: "arial"; }
    				table { width: 1200px;;}
    				table, tr, th, td { border: 1px solid black; border-collapse: collapse; padding: 4px;}
    				.alignr { text-align: right; }
    				.alignc { text-align: center; }
    			</style>
     
    			<p><strong>LISTE DES PRODUITS</strong></p>
        <p>Sélectionnez de un à plusieurs critères de recherche.</p>
        <form id="frmRecherche">
     
            <!-- Liste des references -->
            <label for="num_etude">reference</label>
            <select id="num_etude" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($num_etude as $id => $num_etude): ?>
                <option value="<?php echo $id; ?>"><?php echo $num_etude; ?></option>
                <?php endforeach; ?>
            </select>
     
            <!-- Liste des types -->
            <label for="type_etude">type</label>
            <select id="type_etude" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($type_etude as $id => $type_etude): ?>
                <option value="<?php echo $id; ?>"><?php echo $type_etude; ?></option>
                <?php endforeach; ?>
            </select>
     
    		 <!-- Liste des clients -->
            <label for="nom_client">clients</label>
            <select id="nom_client" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($nom_client as $id => $nom_client): ?>
                <option value="<?php echo $id; ?>"><?php echo $nom_client; ?></option>
                <?php endforeach; ?>
            </select>
     
    		<!-- Liste des villes -->
            <label for="ville_client">villes</label>
            <select id="ville_client" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($ville_client as $id => $ville_client): ?>
                <option value="<?php echo $id; ?>"><?php echo $ville_client; ?></option>
                <?php endforeach; ?>
            </select>
     
    		<!-- Liste des zones -->
            <label for="zone_etude">zones</label>
            <select id="zone_etude" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($zone_etude as $id => $zone_etude): ?>
                <option value="<?php echo $id; ?>"><?php echo $zone_etude; ?></option>
                <?php endforeach; ?>
            </select>
     
    		<!-- Liste des demandeurs -->
            <label for="demand_client">demandeur</label>
            <select id="demand_client" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($demand_client as $id => $demand_client): ?>
                <option value="<?php echo $id; ?>"><?php echo $demand_client; ?></option>
                <?php endforeach; ?>
            </select>
     
    		<!-- Liste des offres -->
            <label for="offre_etude">offres</label>
            <select id="offre_etude" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($offre_etude as $id => $offre_etude): ?>
                <option value="<?php echo $id; ?>"><?php echo $offre_etude; ?></option>
                <?php endforeach; ?>
            </select>
     
    		<!-- Liste des rorx -->
            <label for="rorx_etude">rorx</label>
            <select id="rorx_etude" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($rorx_etude as $id => $rorx_etude): ?>
                <option value="<?php echo $id; ?>"><?php echo $rorx_etude; ?></option>
                <?php endforeach; ?>
            </select>
     
    		<!-- Liste des POI -->
            <label for="ui_etude">POI</label>
            <select id="ui_etude" onchange="filterLists();">
                <option value=""></option>
                <?php foreach($ui_etude as $id => $ui_etude): ?>
                <option value="<?php echo $id; ?>"><?php echo $ui_etude; ?></option>
                <?php endforeach; ?>
            </select>
     
        </form>
     
    	 <!-- Données de la table -->
        <table>
            <thead>
                <tr>
                    <th>reference</th>
                    <th>type</th>
                    <th>client</th>
    				<th>ville</th>
    				<th>Zone</th>
    				<th>demandeur</th>
    				<th>type offre</th>
    				<th>rorx</th>
    				<th>POI</th>
                </tr>
            </thead>
            <tbody id="table">
                <?php foreach($data as $row): ?>
                <tr>
                    <td><?php echo $row['num_etude']; ?></td>
                    <td><?php echo $row['type_etude']; ?></td>
                    <td><?php echo $row['nom_client']; ?></td>
    				<td><?php echo $row['ville_client']; ?></td>
    				<td><?php echo $row['zone_etude']; ?></td>
    				<td><?php echo $row['demand_client']; ?></td>
    				<td><?php echo $row['offre_etude']; ?></td>
    				<td><?php echo $row['rorx_etude']; ?></td>
    				<td><?php echo $row['ui_etude']; ?></td>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
     
     
    	</body>
     
     
    </html>
    Et voila la page FilterLists.php avec les contrôles :
    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
    <?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
    $num_etude = null;
    $type_etude = null;
    $nom_client = null;
    $ville_client = null;
    $zone_etude = null;
    $offre_etude = null;
    $rorx_etude = null;
    $ui_etude = 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>
     *     <num_etude></num_etude>
     *     <type_etude></type_etude>
     *	    <nom_client></nom_client>
     *		<ville_client></ville_client>
     *		<zone_etude></zone_etude>
     *		<demand_client></demand_client>
     *		<offre_etude></offre_etude>
     *		<rorx_etude></rorx_etude>
     *		<ui_etude></ui_etude>
     *     <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
     
     
    // ref etude
    if (isset($_POST['num_etude']) && (ctype_digit("{$_POST['num_etude']}"))) {
        $num_etude    = $_POST['num_etude'];
        $where[] = 'num_etude = '.intval($type);
    }
     
    // type etude
    if (isset($_POST['type_etude']) && (ctype_digit("{$_POST['type_etude']}"))) {
      $type_etude    = $_POST['type_etude'];
      $where[] = 'type_etude = '.intval($type_etude);
    }
     
    // nom client
    if (isset($_POST['nom_client']) && (ctype_digit("{$_POST['nom_client']}"))) {
      $nom_client   = $_POST['nom_client'];
      $where[] = 'nom_client = '.intval($nom_client);
    }
     
    // ville client
    if (isset($_POST['ville_client']) && (ctype_digit("{$_POST['ville_client']}"))) {
      $ville_client    = $_POST['ville_client'];
      $where[] = 'ville_client = '.intval($ville_client);
    }
     
    // zone etude
    if (isset($_POST['zone_etude']) && (ctype_digit("{$_POST['zone_etude']}"))) {
      $zone_etude    = $_POST['zone_etude'];
      $where[] = 'zone_etude = '.intval($zone_etude);
    }
     
    // demandeur
    if (isset($_POST['demand_client']) && (ctype_digit("{$_POST['demand_client']}"))) {
      $demand_client    = $_POST['demand_client'];
      $where[] = 'demand_client = '.intval($demand_client);
    }
     
    // offre
    if (isset($_POST['offre_etude']) && (ctype_digit("{$_POST['offre_etude']}"))) {
      $offre_etude   = $_POST['offre_etude'];
      $where[] = 'offre_etude = '.intval($offre_etude);
    }
     
    // rorx
    if (isset($_POST['rorx_etude']) && (ctype_digit("{$_POST['rorx_etude']}"))) {
      $rorx_etude    = $_POST['rorx_etude'];
      $where[] = 'rorx_etude = '.intval($rorx_etude);
    }
     
    // rorx
    if (isset($_POST['ui_etude']) && (ctype_digit("{$_POST['ui_etude']}"))) {
      $ui_etude    = $_POST['ui_etude'];
      $where[] = 'ui_etude = '.intval($ui_etude);
    }
     
    ### FILTRAGE DES DONNÉES DES LISTES (SSI RIEN N'A DÉJÀ ÉTÉ SÉLECTIONNÉ)
    $sql_where = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where);
     
     
    // ICI MODIFIEZ LE PARAMETRAGE
    // Connexion à la base de données
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
     
    // ------------ Reste a faire 20/10 -----------------------------------------------------------------
    // 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
        etude
        $sql_where
    SQL;
     
    //---------------------------------------------------------------------------------------------------------- 
    /**
     * Crée le code HTML pour les liste relatives aux types et lieux
     * @param mixed $sql
     * @return string
     */
    function filtrageTypesLieux($sql)
    {
        $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    	$data   = array();
        $qry    = $bdd->query($sql);
     	$data[] = '<option value=""></option>'; // ligne vide
        while ($row = $qry->fetch(PDO::FETCH_NUM)) {
            $data[] = '<option value="'.$row[0].'">'.$row[1].'</option>';
        }
        return implode("\n", $data);
    }
     
     
    // si la reference n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($num_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'num_etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY num_etude";
        $xml->addChild('num_etude', filtrageTypesLieux($sql));
    }
     
    // si le type n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($type_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'type_etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY type_etude";
        $xml->addChild('type_etude', filtrageTypesLieux($sql));
    }
     
    // si le nom clientn'a pas déjà été sélectionnée -> filtrage de la liste
    if ($nom_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'nom_client' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY nom_client";
        $xml->addChild('nom_client', filtrageTypesLieux($sql));
    }
     
    // si la ville n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($ville_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'ville_client' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY ville_client";
        $xml->addChild('ville_client', filtrageTypesLieux($sql));
    }
     
    // si la zone n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($zone_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'zone_etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY zone_etude";
        $xml->addChild('zone_etude', filtrageTypesLieux($sql));
    }
     
    // si la demande client n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($demand_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'demand_client' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY demand_client";
        $xml->addChild('demand_client', filtrageTypesLieux($sql));
    }
     
    // si l'offre n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($offre_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'offre_etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY offre_etude";
        $xml->addChild('offre_etude', filtrageTypesLieux($sql));
    }
     
    // si le rorx n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($rorx_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'rorx_etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY rorx_etude";
        $xml->addChild('rorx_etude', filtrageTypesLieux($sql));
    }
     
    // si la POI n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($ui_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'ui_etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY ui_etude";
        $xml->addChild('ui_etude', filtrageTypesLieux($sql));
    }
     
    // données de la table
    $sql = ('SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM etude ORDER BY num_etude ASC');
    $qry = $bdd->query($sql);
     
    // mise en forme des données
    // ici on reconstruit les données de la table
    while($row = $qry->fetch(PDO::FETCH_ASSOC)){
        $data[] = <<<HTML
    <tr>
        <td>{$row['num_etude']}</td>
        <td>{$row['type_etude']}</td>
        <td>{$row['nom_client']}</td>
    	<td>{$row['ville_client']}</td>
    	<td>{$row['zone_etude']}</td>
    	<td>{$row['demand_client']}</td>
    	<td>{$row['offre_etude']}</td>
    	<td>{$row['rorx_etude']}</td>
    	<td>{$row['ui_etude']}</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();
     
    ?>
    L'affichage et le chargement des listes déroulantes fonctionnement bien, par contre la selection d'une valeur n'affine pas le tableau.
    Lorsque je test la page filterlists.php j’obtiens l'erreur suivante :
    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\filterLists.php on line 125
    Quelqu'un pourrait il m'aider à trouver la solution ? je sèche complétement la.
    Merci d'avance à vous

    Tom

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ce genre d'erreur est typique d'une requête qui échoue. Le problème dans ton cas, c'est que comme l'exécution est faite par une fonction, il est difficile de déterminer quelle est la requête fautive.
    Ce que tu peux faire, c'est activer les exceptions PDO au niveau de le connexion, comme ça on aura un peu de plus d'informations sur le plantage. Tu peux aussi ajouter un debug à l'ancienne en affichant la requête exécutée. Quelque chose comme :
    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
    function filtrageTypesLieux($sql)
    {
        $data   = array();
        try {
            $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
            $bbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
            $qry    = $bdd->query($sql);
            $data[] = '<option value=""></option>'; // ligne vide
            while ($row = $qry->fetch(PDO::FETCH_NUM)) {
                $data[] = '<option value="'.$row[0].'">'.$row[1].'</option>';
            }
        } catch (PDOException $e) {
            echo "Erreur sur l'exécution de la requête ".$sql." : ".$e->getMessage();
        }
        return implode("\n", $data);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Par défaut
    Merci Celira pour ton aide

    Cela m'a permis de corriger les erreurs dans mes requêtes SQL, en effet la variable passée n'était pas la bonne.
    A présent, niveau SQL tout à l'air de bien fonctionner par contre j'ai maintenant une erreur XML et la je ne vois pas d’où cela peu venir

    Page filterlists.php
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    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
    <?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
    $num_etude = null;
    $type_etude = null;
    $nom_client = null;
    $ville_client = null;
    $zone_etude = null;
    $offre_etude = null;
    $rorx_etude = null;
    $ui_etude = 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>
     *     <num_etude></num_etude>
     *     <type_etude></type_etude>
     *	    <nom_client></nom_client>
     *		<ville_client></ville_client>
     *		<zone_etude></zone_etude>
     *		<demand_client></demand_client>
     *		<offre_etude></offre_etude>
     *		<rorx_etude></rorx_etude>
     *		<ui_etude></ui_etude>
     *     <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
     
     
    // ref etude
    if (isset($_POST['num_etude']) && (ctype_digit("{$_POST['num_etude']}"))) {
        $num_etude    = $_POST['num_etude'];
        $where[] = 'num_etude = '.intval($type);
    }
     
    // type etude
    if (isset($_POST['type_etude']) && (ctype_digit("{$_POST['type_etude']}"))) {
      $type_etude    = $_POST['type_etude'];
      $where[] = 'type_etude = '.intval($type_etude);
    }
     
    // nom client
    if (isset($_POST['nom_client']) && (ctype_digit("{$_POST['nom_client']}"))) {
      $nom_client   = $_POST['nom_client'];
      $where[] = 'nom_client = '.intval($nom_client);
    }
     
    // ville client
    if (isset($_POST['ville_client']) && (ctype_digit("{$_POST['ville_client']}"))) {
      $ville_client    = $_POST['ville_client'];
      $where[] = 'ville_client = '.intval($ville_client);
    }
     
    // zone etude
    if (isset($_POST['zone_etude']) && (ctype_digit("{$_POST['zone_etude']}"))) {
      $zone_etude    = $_POST['zone_etude'];
      $where[] = 'zone_etude = '.intval($zone_etude);
    }
     
    // demandeur
    if (isset($_POST['demand_client']) && (ctype_digit("{$_POST['demand_client']}"))) {
      $demand_client    = $_POST['demand_client'];
      $where[] = 'demand_client = '.intval($demand_client);
    }
     
    // offre
    if (isset($_POST['offre_etude']) && (ctype_digit("{$_POST['offre_etude']}"))) {
      $offre_etude   = $_POST['offre_etude'];
      $where[] = 'offre_etude = '.intval($offre_etude);
    }
     
    // rorx
    if (isset($_POST['rorx_etude']) && (ctype_digit("{$_POST['rorx_etude']}"))) {
      $rorx_etude    = $_POST['rorx_etude'];
      $where[] = 'rorx_etude = '.intval($rorx_etude);
    }
     
    // rorx
    if (isset($_POST['ui_etude']) && (ctype_digit("{$_POST['ui_etude']}"))) {
      $ui_etude    = $_POST['ui_etude'];
      $where[] = 'ui_etude = '.intval($ui_etude);
    }
     
    ### FILTRAGE DES DONNÉES DES LISTES (SSI RIEN N'A DÉJÀ ÉTÉ SÉLECTIONNÉ)
    $sql_where = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where);
     
     
    // ICI MODIFIEZ LE PARAMETRAGE
    // Connexion à la base de données
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
     
    // ------------ Reste a faire 20/10 -----------------------------------------------------------------
    // 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
        etude
        $sql_where
    SQL;
     
    //---------------------------------------------------------------------------------------------------------- 
    /**
     * Crée le code HTML pour les liste relatives aux types et lieux
     * @param mixed $sql
     * @return string
     */
    function filtrageTypesLieux($sql)
    {
    	try
    	{
    		$bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$data   = array();
    		$qry    = $bdd->query($sql);
    		$data[] = '<option value=""></option>'; // ligne vide
    		while ($row = $qry->fetch(PDO::FETCH_NUM)) {
    			$data[] = '<option value="'.$row[0].'">'.$row[0].'</option>';
    		}
    	}
    	catch (PDOException $e) {
    	echo "Erreur sur l'exécution de la requête ".$sql." : ".$e->getMessage();
        }
        return implode("\n", $data);
    }
     
     
    // si la reference n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($num_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = ("SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude from $from etude ORDER BY num_etude");
        $xml->addChild('num_etude', filtrageTypesLieux($sql));
    }
     
    // si le type n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($type_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY type_etude";
        $xml->addChild('num_etude', filtrageTypesLieux($sql));
    }
     
    // si le nom clientn'a pas déjà été sélectionnée -> filtrage de la liste
    if ($nom_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY nom_client";
        $xml->addChild('nom_client', filtrageTypesLieux($sql));
    }
     
    // si la ville n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($ville_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY ville_client";
        $xml->addChild('ville_client', filtrageTypesLieux($sql));
    }
     
    // si la zone n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($zone_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY zone_etude";
        $xml->addChild('zone_etude', filtrageTypesLieux($sql));
    }
     
    // si la demande client n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($demand_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY demand_client";
        $xml->addChild('demand_client', filtrageTypesLieux($sql));
    }
     
    // si l'offre n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($offre_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY offre_etude";
        $xml->addChild('offre_etude', filtrageTypesLieux($sql));
    }
     
    // si le rorx n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($rorx_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY rorx_etude";
        $xml->addChild('rorx_etude', filtrageTypesLieux($sql));
    }
     
    // si la POI n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($ui_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY ui_etude";
        $xml->addChild('ui_etude', filtrageTypesLieux($sql));
    }
     
    // données de la table
    $sql = ('SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM etude ORDER BY num_etude ASC');
    $qry = $bdd->query($sql);
     
    // mise en forme des données
    // ici on reconstruit les données de la table
    while($row = $qry->fetch(PDO::FETCH_ASSOC)){
        $data[] = <<<HTML
    <tr>
        <td>{$row['num_etude']}</td>
        <td>{$row['type_etude']}</td>
        <td>{$row['nom_client']}</td>
    	<td>{$row['ville_client']}</td>
    	<td>{$row['zone_etude']}</td>
    	<td>{$row['demand_client']}</td>
    	<td>{$row['offre_etude']}</td>
    	<td>{$row['rorx_etude']}</td>
    	<td>{$row['ui_etude']}</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();
     
    ?>

    cela me donne l'erreur suivante :
    Erreur d'analyse XML : données incompréhensibles après l'élément de document
    Emplacement : http://localhost/filterlists.php
    Numéro de ligne 2, Colonne 1 :<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    ^

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Visiblement ce n'est pas du XML, mais du HTML, et le fait qu'il y ait "xdebug-error" comme class laisse penser que tu as XDebug sur ton serveur php et qu'il essaye d'afficher quelque chose (typiquement un message d'erreur, notice...)
    Essaye de désactiver ton header XML pour que ça affiche directement dans la page.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Par défaut
    encore un sans faut pour toi Celira.

    Effectivement, il y avait un problème de déclaration de variable en début de page.
    A présent le fichier XML est bien généré et l'interaction avec les boutons fonctionnent.

    Sauf (bien sur !) que les fichier XML est toujours rempli avec les mêmes valeurs alors que les requêtes SQL sont différentes

    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
    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
    <?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
    $num_etude = null;
    $type_etude = null;
    $nom_client = null;
    $ville_client = null;
    $zone_etude = null;
    $demand_client = null;
    $offre_etude = null;
    $rorx_etude = null;
    $ui_etude = 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>
     *     <num_etude></num_etude>
     *     <type_etude></type_etude>
     *	    <nom_client></nom_client>
     *		<ville_client></ville_client>
     *		<zone_etude></zone_etude>
     *		<demand_client></demand_client>
     *		<offre_etude></offre_etude>
     *		<rorx_etude></rorx_etude>
     *		<ui_etude></ui_etude>
     *     <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
     
     
    // ref etude
    if (isset($_POST['num_etude']) && (ctype_digit("{$_POST['num_etude']}"))) {
        $num_etude    = $_POST['num_etude'];
        $where[] = 'num_etude = '.intval($num_etude);
    }
     
    // type etude
    if (isset($_POST['type_etude']) && (ctype_digit("{$_POST['type_etude']}"))) {
      $type_etude    = $_POST['type_etude'];
      $where[] = 'type_etude = '.intval($type_etude);
    }
     
    // nom client
    if (isset($_POST['nom_client']) && (ctype_digit("{$_POST['nom_client']}"))) {
      $nom_client   = $_POST['nom_client'];
      $where[] = 'nom_client = '.intval($nom_client);
    }
     
    // ville client
    if (isset($_POST['ville_client']) && (ctype_digit("{$_POST['ville_client']}"))) {
      $ville_client    = $_POST['ville_client'];
      $where[] = 'ville_client = '.intval($ville_client);
    }
     
    // zone etude
    if (isset($_POST['zone_etude']) && (ctype_digit("{$_POST['zone_etude']}"))) {
      $zone_etude    = $_POST['zone_etude'];
      $where[] = 'zone_etude = '.intval($zone_etude);
    }
     
    // demandeur
    if (isset($_POST['demand_client']) && (ctype_digit("{$_POST['demand_client']}"))) {
      $demand_client    = $_POST['demand_client'];
      $where[] = 'demand_client = '.intval($demand_client);
    }
     
    // offre
    if (isset($_POST['offre_etude']) && (ctype_digit("{$_POST['offre_etude']}"))) {
      $offre_etude   = $_POST['offre_etude'];
      $where[] = 'offre_etude = '.intval($offre_etude);
    }
     
    // rorx
    if (isset($_POST['rorx_etude']) && (ctype_digit("{$_POST['rorx_etude']}"))) {
      $rorx_etude    = $_POST['rorx_etude'];
      $where[] = 'rorx_etude = '.intval($rorx_etude);
    }
     
    // rorx
    if (isset($_POST['ui_etude']) && (ctype_digit("{$_POST['ui_etude']}"))) {
      $ui_etude    = $_POST['ui_etude'];
      $where[] = 'ui_etude = '.intval($ui_etude);
    }
     
    ### FILTRAGE DES DONNÉES DES LISTES (SSI RIEN N'A DÉJÀ ÉTÉ SÉLECTIONNÉ)
    $sql_where = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where);
     
     
    // ICI MODIFIEZ LE PARAMETRAGE
    // Connexion à la base de données
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
     
    // ------------ Reste a faire 20/10 -----------------------------------------------------------------
    // 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
        etude
        $sql_where
    SQL;
     
    //---------------------------------------------------------------------------------------------------------- 
    /**
     * Crée le code HTML pour les liste relatives aux types et lieux
     * @param mixed $sql
     * @return string
     */
    function filtrageTypesLieux($sql)
    {
    	try
    	{
    		$bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$data   = array();
    		$qry    = $bdd->query($sql);
    		$data[] = '<option value=""></option>'; // ligne vide
    		while ($row = $qry->fetch(PDO::FETCH_NUM)) {
    			$data[] = '<option value="'.$row[0].'">'.$row[0].'</option>';
    		}
    	}
    	catch (PDOException $e) {
    	echo "Erreur sur l'exécution de la requête ".$sql." : ".$e->getMessage();
        }
        return implode("\n", $data);
    }
     
     
    // si la reference n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($num_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = ("SELECT num_etude from $from ORDER BY num_etude");
        $xml->addChild('num_etude', filtrageTypesLieux($sql));
    }
     
    // si le type n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($type_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY num_etude";
        $xml->addChild('type_etude', filtrageTypesLieux($sql));
    }
     
    // si le nom clientn'a pas déjà été sélectionnée -> filtrage de la liste
    if ($nom_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY nom_client";
        $xml->addChild('nom_client', filtrageTypesLieux($sql));
    }
     
    // si la ville n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($ville_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY ville_client";
        $xml->addChild('ville_client', filtrageTypesLieux($sql));
    }
     
    // si la zone n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($zone_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY zone_etude";
        $xml->addChild('zone_etude', filtrageTypesLieux($sql));
    }
     
    // si la demande client n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($demand_client === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY demand_client";
        $xml->addChild('demand_client', filtrageTypesLieux($sql));
    }
     
    // si l'offre n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($offre_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY offre_etude";
        $xml->addChild('offre_etude', filtrageTypesLieux($sql));
    }
     
    // si le rorx n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($rorx_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY rorx_etude";
        $xml->addChild('rorx_etude', filtrageTypesLieux($sql));
    }
     
    // si la POI n'a pas déjà été sélectionnée -> filtrage de la liste
    if ($ui_etude === null) {
        // si aucun where -> on repart sur l'extraction de toutes les données possibles (pareil qu'au 1er appel index.php)
        $from = ($sql_where === null) ? 'etude' : $fromAndWhere;
        $sql  = "SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $from ORDER BY ui_etude";
        $xml->addChild('ui_etude', filtrageTypesLieux($sql));
    }
     
    // données de la table
    $sql = ('SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM etude ORDER BY num_etude ASC');
    $qry = $bdd->query($sql);
     
    // mise en forme des données
    // ici on reconstruit les données de la table
    while($row = $qry->fetch(PDO::FETCH_ASSOC)){
        $data[] = <<<HTML
    <tr>
        <td>{$row['num_etude']}</td>
        <td>{$row['type_etude']}</td>
        <td>{$row['nom_client']}</td>
    	<td>{$row['ville_client']}</td>
    	<td>{$row['zone_etude']}</td>
    	<td>{$row['demand_client']}</td>
    	<td>{$row['offre_etude']}</td>
    	<td>{$row['rorx_etude']}</td>
    	<td>{$row['ui_etude']}</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();
     
    ?>
    Extrait XML
    <xml><num_etude><option value=""></option>
    <option value="0039HTR1">0039HTR1</option>
    <option value="0039HTR8">0039HTR8</option>
    <option value="0039HTY">0039HTY</option>
    <option value="1">1</option>
    <option value="11111111">11111111</option>
    <option value="12">12</option>
    <option value="124789">124789</option>
    <option value="13">13</option>
    <option value="2">2</option>
    <option value="8954">8954</option>

    </num_etude><type_etude><option value=""></option>
    <option value="0039HTR1">0039HTR1</option>
    <option value="0039HTR8">0039HTR8</option>
    <option value="0039HTY">0039HTY</option>
    <option value="1">1</option>
    <option value="11111111">11111111</option>
    <option value="12">12</option>
    <option value="124789">124789</option>
    <option value="13">13</option>
    <option value="2">2</option>
    <option value="8954">8954</option></type_etude>
    je bloque vraiment de plus en plus.
    Merci beaucoup pour votre aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ (extrait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // nom client
    if (isset($_POST['nom_client']) && (ctype_digit("{$_POST['nom_client']}"))) {
      $nom_client   = $_POST['nom_client'];
      $where[] = 'nom_client = '.intval($nom_client);
    }
    Donc, pour toi, "nom_client" serait... numérique ?
    J'en doute...

    2/
    D'autre part, à quoi bon utiliser PDO, si tu ne fais pas de requête préparée ??
    Autant avoir un coffre-fort, avec une fenêtre ouverte au fond...

  7. #7
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Par défaut
    Après plusieurs tests je cale toujours sur cette histoire de "remise à zéro" du tableau.
    La solution proposé par ABCIWEB me parait être la bonne mais je n'arrive pas à la mettre en œuvre.

    Quelqu'un aurait il une piste ?

    Merci.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ter repetita : c'est une usine à gaz.
    Quand comprendras-tu qu'il est vain de s'acharner ?

    • tu as dans ton code des variables, des trucs et machins qui ne servent pas à grand chose, à part compliquer le code
    • tu répètes x fois le code de connexion $bdd = new PDO('.............');, alors qu'il suffit de le mettre une fois pour toutes en haut du script (ou dans un fichier inclus).


    A ta place :
    • je reprendrais tout à zéro, avec UN SEUL CRITERE, et en simplifiant / optimisant le code
    • une fois que ça marche, j'ajoute un à un les autres critères, sur le même modèle

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

Discussions similaires

  1. [AJAX] Listes liées PHP/Ajax mais aussi BDD
    Par Ludie_Devcom dans le forum jQuery
    Réponses: 3
    Dernier message: 27/03/2014, 09h57
  2. [MySQL] liste liée php/Mysql
    Par klaskerchans dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/11/2013, 08h59
  3. [MySQL] Listes liées PHP JQUERY
    Par CedriZero dans le forum PHP & Base de données
    Réponses: 43
    Dernier message: 19/07/2012, 14h43
  4. [MySQL] 3 listes liées avec PHP/MYSQL
    Par sadigoun dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 22/10/2008, 12h41
  5. Listes liées php/ajax/javasript
    Par johnson95 dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2008, 16h24

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