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

JavaScript Discussion :

[AJAX] liste deroulante liée ajax dur dur


Sujet :

JavaScript

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut [AJAX] liste deroulante liée ajax dur dur
    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();
    ?>

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Et la question est... ?

    edit : et le comble c'est que le post est maintenant taggé "résolu"

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

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

Discussions similaires

  1. [AJAX] Listes deroulantes complexes
    Par lecail65 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/08/2006, 10h04
  2. [AJAX] Listes déroulantes liées avec Ajax
    Par paupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/08/2006, 16h51
  3. [AJAX] liste deroulante ajax
    Par klimero dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 25/04/2006, 15h26
  4. [AJAX] listes deroulantes liées x3
    Par Tempotpo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/04/2006, 16h55
  5. [Rico] Afficher depuis d'une liste deroulante (PHP+AJAX)
    Par maxis dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 27/02/2006, 12h47

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