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

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    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
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    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
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    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
    Invité
    Invité(e)
    Par défaut
    Voilà comment je vois les choses :
    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
    <?php
    $params = array();	// paramètres, pour la requête préparée
    $where = array();	// clause WHERE de la requete
     
    // [....]
     
    // nom client
    if ( !empty($_POST['nom_client']) ) {
      $where[] = "nom_client LIKE :nom_client";
      $params[':nom_client']	= '%'.$_POST['nom_client'].'%';
    }
     
    // [....]
     
    // FILTRAGE DES DONNÉES DES LISTES
    $sql_where = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where);
     
    // [....]

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    function filtrageTypesLieux( $sql, $params )
    {
    	global $bdd; // variable globale
     
    	if( !is_array($params) ){ $params = array(); } // array vide
     
    	try
    	{
    		$qry = $bdd->prepare($sql);
    		$qry->execute($params);
    		[....]

    Pour le reste.....
    Ton code est une vraie usine à gaz.
    Mets-y un peu d'ordre et de logique.
    Dernière modification par Invité ; 21/10/2016 à 18h25.

  8. #8
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    Par défaut
    Bonjour jreaux62.
    Merci pour ton aide et tes remarques.
    J'ai adapté le code selon tes remarques, et il est vrai qu'avec PDO autant préparer les requêtes.

    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
     
    function filtrageTypesLieux($sql, $params)
    {
     
    		$bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$data   = array();
    		if ( !is_array($params) ) { $params = array(); } // Si array vide
    		try
    		{
    			$qry = $bdd->prepare($sql);
    			$qry = $bdd->execute($params); //passage en argument de la variable Params
    			$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);
    }
    Dans l'appel de la fonction fonction, les deux paramètres sont bien passé, la déclaration du tableau et sont remplissage sont mis.
    Mais lors de l’exécution j'ai l'erreur suivante :
    Fatal error: Call to undefined method PDO::execute()
    Encore une fois je sèche un peu.

    En attendant votre aide, je commente et "range" mon code

  9. #9
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    execute s'applique sur le PDOStatment retourné par prepare. Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $stmt = $bdd->prepare($sql);
    $stmt->execute($params); //passage en argument de la variable Params
    $data[] = '<option value=""></option>'; // ligne vide
    while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
    	$data[] = '<option value="'.$row[0].'">'.$row[0].'</option>';
    }
    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]

  10. #10
    Invité
    Invité(e)
    Par défaut
    Exact. Boulette de ma part

  11. #11
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    Par défaut
    merci pour votre aide.
    J'avance pas à pas mais je trébuche encore par moment

    l'injection des variables dans les listes déroulantes fonctionne et leur mise à jour en fonction de la sélection également.
    Seul problème, lors de la sélection l'affichage du tableau ne se fait pas.

    Code entier
    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
    <?php
    //---------------------------------------------------------------------
    //--------------- Declaration des Variable ----------------------------
    // Ce script est appelé à chaque sélection d'un élément d'une liste
     
    // suivi du critère
    $where = array();
    $params =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;
    //--------------------------------------------------------------------------
    //							Structure du fichier XML 						|
    //--------------------------------------------------------------------------
    /**
     * 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>');
     
    //------------------------------------------------------------------------------------------------
    //                     Vérification des listes ayant un choix   								 |
    //			Si choix, preparation requete SQL pour injection dans variable $fromandwhere         | 
    //------------------------------------------------------------------------------------------------
    // ref etude
    if ( !empty($_POST['num_etude']))
     {
      $where[] = "num_etude LIKE :num_etude";
      $params[':num_etude'] = '%'.$_POST['num_etude'].'%';
     }
     
    // type etude
    if ( !empty($_POST['type_etude']))
     {
      $where[] = "type_etude LIKE :type_etude";
      $params[':type_etude'] = '%'.$_POST['type_etude'].'%';
     }
     
     
    // nom client
    if ( !empty($_POST['nom_client']))
     {
      $where[] = "nom_client LIKE :nom_client";
      $params[':nom_client'] = '%'.$_POST['nom_client'].'%';
     }
     
    // ville client
    if ( !empty($_POST['ville_client']))
     {
      $where[] = "ville_client LIKE :ville_client";
      $params[':ville_client'] = '%'.$_POST['ville_client'].'%';
     }
     
    // zone etude
    if ( !empty($_POST['zone_etude']))
     {
      $where[] = "zone_etude LIKE :zone_etude";
      $params['zone_etude'] = '%'.$_POST['zone_etude'].'%';
     }
     
    // demandeur
    if ( !empty($_POST['demand_client']))
     {
      $where[] = "demand_client LIKE :demand_client";
      $params[':demand_client'] = '%'.$_POST['demand_client'].'%';
     }
     
    // offre
     
    if ( !empty($_POST['offre_etude']))
     {
      $where[] = "offre_etude LIKE :offre_etude";
      $params[':offre_etude'] = '%'.$_POST['offre_etude'].'%';
     }
     
    // rorx
    if ( !empty($_POST['rorx_etude']))
     {
      $where[] = "rorx_etude LIKE :rorx_etude";
      $params[':rorx_etude'] = '%'.$_POST['rorx_etude'].'%';
     }
     
    // ui
    if ( !empty($_POST['ui_etude']))
     {
      $where[] = "ui_etude LIKE :ui_etude";
      $params[':ui_etude'] = '%'.$_POST['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);
     
    // 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 
     * @param mixed $sql
     * @return string
     */
    //------------------------- 
    function filtrageTypesLieux($sql, $params)
    {
     
    		$bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$data   = array();
    		if ( !is_array($params) ) { $params = array(); } // Si array vide
    		try
    		{
    			$qry = $bdd->prepare($sql);
    			$qry->execute($params); //passage en argument de la variable Params
    			$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 valeur selectionné, requete & Injection dans fichier XML pour affichage  |
    //------------------------------------------------------------------------------
    // 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 distinct num_etude from $from ORDER BY num_etude");
        $xml->addChild('num_etude', filtrageTypesLieux($sql,$params));
    }
     
    // 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 distinct type_etude FROM $from";
        $xml->addChild('type_etude', filtrageTypesLieux($sql,$params));
    }
     
    // 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 distinct nom_client FROM $from ORDER BY nom_client";
        $xml->addChild('nom_client', filtrageTypesLieux($sql,$params));
    }
     
    // 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 distinct ville_client FROM $from ORDER BY ville_client";
        $xml->addChild('ville_client', filtrageTypesLieux($sql,$params));
    }
     
    // 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 distinct zone_etude FROM $from ORDER BY zone_etude";
        $xml->addChild('zone_etude', filtrageTypesLieux($sql,$params));
    }
     
    // 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 distinct demand_client FROM $from ";
        $xml->addChild('demand_client', filtrageTypesLieux($sql,$params));
    }
     
    // 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 distinct offre_etude FROM $from ";
        $xml->addChild('offre_etude', filtrageTypesLieux($sql,$params));
    }
     
    // 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 distinct rorx_etude FROM $from ";
        $xml->addChild('rorx_etude', filtrageTypesLieux($sql,$params));
    }
     
    // 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 ui_etude FROM $from ";
        $xml->addChild('ui_etude', filtrageTypesLieux($sql,$params));
    }
     
    // -----------------------------------------------------------------
    //			Affichage resultat selon selection						|
    // -----------------------------------------------------------------
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    $affiche_tri =("SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM :selection ORDER BY num_etude ASC");
    $qry = $bdd->prepare($affiche_tri);
    $qry->execute(array(
    		'selection' => $fromAndWhere,
    		));
     
    // -----------------------------------------------------------------
    //  			Mise en forme Tableau 								|
    //------------------------------------------------------------------
    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();
     
    ?>
    après des test, le problème semble venir de cette zone de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // -----------------------------------------------------------------
    //			Affichage resultat selon selection						|
    // -----------------------------------------------------------------
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    $affiche_tri =("SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM :selection ORDER BY num_etude ASC");
    $qry = $bdd->prepare($affiche_tri);
    $qry->execute(array(
    		'selection' => $fromAndWhere,
    		));
    //.......
    //------------------------------------------------------------------ 
    if (empty($data)) { // pas de données correspondant au filtre
      $data[] = '<tr></tr>';
    }
    Je désespère de pouvoir cliquer sur "résolu"

  12. #12
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $affiche_tri =("SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM :selection ORDER BY num_etude ASC");
    $qry = $bdd->prepare($affiche_tri);
    $qry->execute(array(
    		'selection' => $fromAndWhere,
    		));
    Sauf erreur de ma part, on ne peut pas passer les noms de colonnes ou de table en paramètre d'une requête. Il faut donc intégrer la structure from/where par concaténation ordinaire et envoyer les paramètres à la méthode execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $affiche_tri =("SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,rorx_etude,ui_etude FROM $fromAndWhere ORDER BY num_etude ASC");
    $qry = $bdd->prepare($affiche_tri);
    $qry->execute($params);
    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]

  13. #13
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Celira ca fonctionne parfaitement Vraiment top ton aide.

    Je rencontre un dernier (j’espère) souci.
    Dans mon affichage suite à sélection, j'affiche un bouton "Valider" qui doit me permettre par la suite de faire une modification dans ma table SQL

    Page : Filterlist.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
     
    while($row = $qry->fetch(PDO::FETCH_ASSOC)){
       $lien_hidden = $row['num_etude'];
    $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['arriv_etude']}</td>
    	<td>{$row['fin_etude']}</td>
    	<td>{$row['rorx_etude']}</td>
    	<td>{$row['ui_etude']}</td>
    	<td> </form method="post" action="indextest.php"> <input type="hidden" name="lien_hidden" value=$lien_hidden /> <input type="submit" name="valid" value="valider" /> </form> </td> 
    	<td>{$row['comment_etude']}</td>
    </tr>
    HTML;
    }

    Page Indextest.php
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (isset($_POST['lien_hidden']))
      {
        $dateM = date("Y-m-d");
        $update = $bdd->prepare("UPDATE etude SET fin_etude = :date_fin WHERE num_etude = :num_etude") ;
        $update->execute(array(
    	 'date_fin' => $dateM,
    	 'num_etude' => $_POST['lien_hidden'],
    	));	
    }

    Le bouton s'affiche bien suite a sélection, le code HTML est bien présent également dans le fichier XML avec la bonne référence à la place $lien_hidden.
    Par contre dès lors que je clic sur le bouton, aucune action

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td> </form method="post" ......
    Y'a comme un défaut...

  15. #15
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    Par défaut
    exact ca va mieux maintenant, merci jreaux62

    Il me reste encore une interrogation, le filtre avec les listes déroulantes etc... fonctionnement.
    Par contre, il m'est impossible de recharger le tableau en entier, même en cliquant dans le choix vide de la liste.

    Est un fonctionnement normal ou est il possible de le faire (sans avoir à recharger la page PHP) ?

    Merci.

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Je prends la discussion en cours sans avoir regardé en détail chacun de tes post mais d'après le titre de la discussion, si tes listes dépendent de requêtes ajax alors il te faudra programmer une requête supplémentaire pour annuler les filtres quand on clique sur le choix vide.

  17. #17
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci ABCIWEB pour ton retour.
    J'étudie la piste mais je bloque un peu, du moins mes tests sont infructueux

    Si jamais vous avez une idée, je suis preneur

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

    on ne peut pas grand chose pour toi si tu ne montres pas ton code (corrigé).
    Le formulaire aussi (le code HTML généré devrait suffire).

  19. #19
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Ci dessous le code :

    page index
    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
     
    // Connexion a la base de données
                 $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
     
     
    				// ----------------------------------------------------------
    				// 	Definition des variable pour insertion XML 				 |
    				// ----------------------------------------------------------
    			    $num_etude = array();
    				$type_etude = array();
    				$nom_client = array();
    				$ville_client = array();
    				$zone_etude = array();
    				$demand_client = array();
    				$offre_etude = array();
    				$fin_etude = array();
    				$rorx_etude = array();
    				$ui_etude = array();
    				$table = array();
     
     
    			// -----------------------------------------------------------------
    			// 			Selection des données a afficher 	              	       |
    			// -----------------------------------------------------------------
     
    			//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];
    			}
                           // #### La même chose es répété pour chaque colonne du tableau ... ####
     
    // Fonction filterlists pour tri selon selection faite ...
    <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 fin_etude = $('#fin_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é (via Jquery)
    				$.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+'&fin_etude='+fin_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('fin_etude').text()).length) $('#fin_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);
    						// MAJ de la table
    						if ((code = $(response).find('table').text()).length) $('#table').html(code);
    						}
    					});
    			}
    			</script>
                           // -------------------------------------
                           //  Chargement des listes déroulantes    |
                           // -------------------------------------
                             <table>
     
                <tr>
                    <th class="grise"> Reference
    					<form id="frmRecherche">
    						<!-- Liste des references -->
    						<label for="num_etude"></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> </form> 
    				</th>
                         //####Même chose pour chaque colonne ####
               </tr </table>
                   // #####affichage du tableau ensuite ####
    Page 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
     
    //---------------------------------------------------------------------
    //--------------- Declaration des Variable ----------------------------
    // Ce script est appelé à chaque sélection d'un élément d'une liste
     
    // suivi du critère
    $where = array();
    $params =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;
    $fin_etude = null;
    $rorx_etude = null;
    $ui_etude = null;
    //--------------------------------------------------------------------------
    //							Structure du fichier XML 	           |
    //--------------------------------------------------------------------------
    /**
     * 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>
     *		<arriv_etude></arriv_etude>
     *		<fin_etude></fin_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>');
     
    //------------------------------------------------------------------------------------------------
    //                     Vérification des listes ayant un choix   								 |
    //			Si choix, preparation requete SQL pour injection dans variable $fromandwhere         | 
    //------------------------------------------------------------------------------------------------
    // ref etude
    if ( !empty($_POST['num_etude']))
     {
      $where[] = "num_etude LIKE :num_etude";
      $params[':num_etude'] = '%'.$_POST['num_etude'].'%';
     }
     
     // #### la même chose est faite pour chaque colonne du tableau ####
     
    //------------------------------------------------------------------------------------------------------ 
    ### FILTRAGE DES DONNÉES DES LISTES (SSI RIEN N'A DÉJÀ ÉTÉ SÉLECTIONNÉ)
    $sql_where = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where);
     
    // 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 
     * @param mixed $sql
     * @return string
     */
    //------------------------- 
    function filtrageTypesLieux($sql, $params)
    {
     
    		$bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$data   = array();
    		if ( !is_array($params) ) { $params = array(); } // Si array vide
    		try
    		{
    			$qry = $bdd->prepare($sql);
    			$qry->execute($params); //passage en argument de la variable Params
    			$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 valeur selectionné, requete & Injection dans fichier XML pour affichage  |
    //------------------------------------------------------------------------------
    // 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 distinct num_etude from $from ORDER BY num_etude");
        $xml->addChild('num_etude', filtrageTypesLieux($sql,$params));
    }
    // ####Meme chose pour chaque colonne du tableau ####
     
    // -----------------------------------------------------------------
    //			Affichage resultat selon selection				|
    // -----------------------------------------------------------------
    $bdd = new PDO('mysql:host=localhost;dbname=gestion_etude;charset=utf8', 'root', '');
    $affiche_tri =("SELECT num_etude,type_etude,nom_client,ville_client,zone_etude,demand_client,offre_etude,arriv_etude,fin_etude,rorx_etude,ui_etude,comment_etude FROM $fromAndWhere ORDER BY num_etude ASC");
    $qry = $bdd->prepare($affiche_tri);
    $qry->execute($params);
     }
     
    // ####Mise en forme & affichage du tableau par la suite ####
     
    //------------------------------------------------------------------ 
    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();
    J'ai volontairement enlevé toutes les lignes concernant l'affichage du tableau etc... et également les répétitions de conditions pour chaque donnée.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Quelle usine à gaz...

    Je ne vois pas l'intérêt de la variable $fromAndWhere (le fait d'ajouter le nom de la table dans la variable).

    alors qu'il suffit d'écrire dans les requêtes :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    "...... FROM etude $sql_where......."

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

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