bonjour,
voila j'ai alimenter une liste deroulante avec des categorie et ses ous_categorie dont voici le 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
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "idealeparut";
 
$connexion = mysql_connect($serveur, $admin, $mdp);
  mysql_select_db($base, $connexion);
// On récupère tous les articles, triés par catégorie, titre, référence.
$req = 'SELECT c.nom_categorie,s.nom_sous_categorie
        FROM categorie_annonce as c, sous_categorie_annonce as s
		where s.num_categorie=c.id_categorie
       ';
$res = mysql_query($req) or exit('Erreur: '.mysql_error());
 
 
 
 
$num_categorie = null;
echo('<select name="categorie">');
while ($donnees = mysql_fetch_assoc($res)) {
  // Si on change de catégorie, on l'affiche dans le <select>.
if ($donnees['nom_categorie'] !== $num_categorie) {
    $num_categorie = $donnees['nom_categorie'];
    echo('<optgroup label="'.$num_categorie.'">');
  }
  //On ajoute "logiquement" notre <option>.
  echo('<option value="'.$donnees['num_categorie'].'">'.$donnees['nom_sous_categorie'].'</option>');
}
echo('</select>');
 
 
?>
ce code fonctionne nikel.
mais je veut que quand on choisi une sous-catégorie de cette liste sa sous-sous-catégorie apparait dans une liste déroulante en dessous.
voila ce que j ai trouver:

page index.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
<?php
$db = array(
    'server' => 'localhost',
    'user' => 'root',
    'passwd' => '',
    'name' => 'idealeparut'
);
 
 
$mysqli = new mysqli($db['server'], $db['user'], $db['passwd'], $db['name']);
 
if (0 !== mysqli_connect_errno()) {
    exit('Could not connect to database: ' . mysqli_connect_error());
}
 
// categorie initiales
$sql = 'SELECT c.nom_categorie,s.nom_sous_categorie
        FROM categorie_annonce as c, sous_categorie_annonce as s
		where s.num_categorie=c.id_categorie';
?>
 
<script type="text/javascript" src="categorie.js"></script>
 
<form action="submit.php" method="post" id="form">
 
<p>Sélectionnez une categorie:
    <select name="categorie" id="categorie" onchange="updateDepartements(this.value)">
    <?php
    if (FALSE !== ($res = $mysqli->query($sql)or exit('Erreur: '.mysql_error()))) {
$num_categorie = null;
echo('<select name="categorie">');
       while ($donnees = mysql_fetch_assoc($res)) {
  // Si on change de catégorie, on l'affiche dans le <select>.
if ($donnees['nom_categorie'] !== $num_categorie) {
    $num_categorie = $donnees['nom_categorie'];
    echo('<optgroup label="'.$num_categorie.'">');
  }
  //On ajoute "logiquement" notre <option>.
            printf('<option value="%s">%s</option>', $row['num_categorie'],  $row['nom_sous_categorie']);
        }
        $res->close();
    }
    ?>
 
 
 
 
 
    </select>
</p>
<p>Sélectionnez une sous_categorie:
    <select name="categorie" id="categorie" onchange="updatesousCategorie(this.value)">
    <?php
    if (FALSE !== ($res = $mysqli->query($sql))) {
 
        while ($row = $res->fetch_assoc()) {
            printf('<option value="%s">%s</option>', $row['id_categorie'],  $row['nom_categorie']);
        }
        $res->close();
    }
    ?>
<p>Sélectionnez une sous-categorie:
    <select name="sous_categorie" id="sous_categorie"></select>
</p>
 
<p><input type="submit" value="Soumettre" />
 
</form>

page categorie.js:
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
var ajax;
 
try {
    ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
    try {
        ajax = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
        if (typeof XMLHttpRequest!='undefined') {
            ajax = new XMLHttpRequest();
        }
    }
}
 
function updatesousCategorie(categorie) {
    ajax.open('get', 'rpc.php?categorie=' + categorie);
    ajax.onreadystatechange = handleResponse;
    ajax.send(null);
}
 
function handleResponse() {
 
    if(ajax.readyState == 4) {
 
        var data = ajax.responseXML.getElementsByTagName('sous_categorie');
 
        document.getElementById('sous_categorie').innerHTML = '';
        for(var i=0;i<data.length;i++) {
 
            var option = document.createElement('option');
            option.setAttribute('value',data[i].getAttribute("id"));
            option.appendChild(document.createTextNode(data[i].firstChild.nodeValue));
            document.getElementById('sous_categorie').appendChild(option);
        }
    }
}
 
function initForm() {
    document.getElementById('categorie').selectedIndex = 0;
    updatesousCategorie(document.getElementById('categorie').value);
}
 
if (window.addEventListener) {
    window.addEventListener("load", initForm, false); 
} else if (window.attachEvent){ 
    window.attachEvent("onload", initForm); 
}
rpc.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
<?php
if (TRUE === isset($_GET['categorie'])) {
    $categorie = intval($_GET['categorie']);
} else {
    exit;
}
 
require './config.inc.php';
 
$mysqli = new mysqli($db['server'], $db['root'], $db['passwd'], $db['name']);
 
if (0 !== mysqli_connect_errno()) {
    exit('Could not connect to database: ' . mysqli_connect_error());
}
 
header('Content-Type: text/xml; charset=UTF-8');
 
$dom = new DOMDocument('1.0', 'utf-8');
$message = $dom->createElement('message');
$message = $dom->appendChild($message);
 
$sql = 'SELECT ref_sous_sous_categorie,libelle_sous_categorie ' .
       'FROM sous_sous_categorie ' .
       'WHERE num_sous_categorie=' . $categorie;
 
if (FALSE !== ($res = $mysqli->query($sql))) {
 
    while ($row = $res->fetch_assoc()) {
        $souscategorie = $dom->createElement('souscategorie', utf8_encode($row['libelle_sous_catgeorie']));
        $souscategorie = $message->appendChild($souscategorie);
        $souscategorie->setAttribute('id', $row['ref_sous_sous_categorie']);
    }
    $res->close();
}
 
echo $dom->saveXML();
?>