Salut,
Le code était d'un niveau très faible.
Les défauts du développement sont :
- Les codes redondants
- Le manque d'originalité sur la création du code
- Énormément de fichiers pour très peu de code
- Tu t'es compliqué la vie sur la sécurité du code SQL
- L'application n'était pas terminé
L'application n'était pas terminé car si tu changes de valeur dans la première ou seconde combobox, les valeurs dans les combobox suivante n'était plus géré.
Donc, je ne te rend pas service car j'ai terminé le travail pour toi.
Tu dois revoir les bases de la programmation, les array, les arbres, les récursives et l'optimisation du code (la réutilisation d'une méthode) et une belle remise en question.
Garde en tête que ces critiques sont positives pour t'améliorer.
J'ai supprimé tout les fichiers excepté Liste.html.
Pour le code PHP, j'ai créé le fichier request.php.
Pour le jQuery, j'ai créé une classe dans le fichier jquery.list.js
La méthode $.list.init(); en pied de page du fichier Liste.html initialise le process pour les listes.
Le code reste n'est en moins rudimentaire pour sa structure et sécurité.
Je n'ai pas optimisé à 100% le jQuery car il y a du contenu (libellé des tags option).
La solution est de retourner le libellé en json.
Voici l'application :
Le fichier Liste.html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<title>Liste Liée</title>
</head>
<select id="dep" name="dep">
<option value="0">-- Départements --</option>
</select>
<select id="com" name="com">
<option value="0">--Communes--</option>
</select>
<select id="uni" name="uni">
<option value="0">--Université--</option>
</select>
<select id="ecolesd" name="ecolesd">
<option value="0">--Ecole secondaire--</option>
</select>
<select id="ecolepri" name="ecolepri">
<option value="0">--Ecole Primaire--</option>
</select>
<script type="text/javascript" src="jquery.list.js"></script>
<script type="text/javascript">
//<![CDATA[
$(function() {
$.list.init();
});
//]]>
</script>
</html>
Le fichier jquery.list.js
(function($) {
$.list = {
file: 'request.php',
setData: 'go',
id: 'dep',
title: null,
init: function() {
$.list.getList();
$('#dep').on('change', function() {
$.list.setData = 'iddep='+$('#dep').val();
$.list.id = 'com';
$.list.title = 'Communes';
$.list.getList();
$('#uni').html('<option value="0">--Université--</option>');
$('#ecolesd').html('<option value="0">--Ecole secondaire--</option>');
$('#ecolepri').html('<option value="0">--Ecole Primaire--</option>');
});
$('#com').on('change', function() {
$.list.setData = 'idcom='+$(this).val();
$.list.id = 'uni';
$.list.title = 'Université';
$.list.getList();
});
},
getList: function() {
$.ajax({
url: $.list.file,
data: $.list.setData,
dataType: 'json',
success: function(json) {
if (!!$.list.title) {
$('select#'+$.list.id).html('');
$('#'+$.list.id).append('<option value="0">--'+$.list.title+'--</option>');
}
$.each(json, function(index, value) {
$('#'+$.list.id).append('<option value="'+index+'">'+value+'</option>');
});
switch ($.list.id) {
case 'uni':
$.list.setData = 'ecolesd=ok&idcom='+$('#com').val();
$.list.id = 'ecolesd';
$.list.title = 'Ecole secondaire';
$.list.getList();
break;
case 'ecolesd':
$.list.setData = 'ecolepri=ok&idcom='+$('#com').val();
$.list.id = 'ecolepri';
$.list.title = 'Ecole Primaire';
$.list.getList();
break;
}
}
});
}
}
})(jQuery);
Le fichier request.php
<?php
// connexion à la base de données
try {
$conn = new PDO('mysql:host=localhost;dbname=listes_liees', 'root', '');
} catch(Exception $e) {
exit('Impossible de se connecter à la base de données.');
}
if ((isset($_GET['ecolesd'])) && (isset($_GET['idcom']))) {
$stmt $conn->prepare("SELECT id, nom FROM ecole_secondaire WHERE idcom :idcom ORDER BY nom");
$stmt->bindParam(':idcom', $_GET['idcom']);
} elseif ((isset($_GET['ecolepri'])) && (isset($_GET['idcom']))) {
$stmt $conn->prepare("SELECT id, nom FROM ecole_primaire WHERE idcom :idcom ORDER BY nom");
$stmt->bindParam(':idcom', $_GET['idcom']);
} elseif (isset($_GET['idcom'])) {
$stmt $conn->prepare("SELECT id, nom FROM campus WHERE idcom :idcom ORDER BY nom");
$stmt->bindParam(':idcom', $_GET['idcom']);
} elseif (isset($_GET['go'])) {
$stmt = $conn->prepare("SELECT id, nom FROM departement ORDER BY nom");
} elseif (isset($_GET['iddep'])) {
$stmt $conn->prepare("SELECT id, nom FROM commune WHERE iddep :id ORDER BY nom");
$stmt->bindParam(':id', $_GET['iddep']);
}
$stmt->execute();
$json = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$json[$row['id']][] = utf8_encode($row['nom']);
}
echo json_encode($json);
?>
Bien à toi,
stéph