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 :

Liste déroulante dynamique


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Par défaut Liste déroulante dynamique
    Salut a tous,
    je suis tombé sur le code pour lier deux listes déroulantes ensembles et ça m'a bien aidé... Merci

    Seulement ce que je voudrais faire maintenant, c'est remplir les listes par des valeurs que je récupere d'une base de données. J'ai donc créer des tableaux (array) en php regroupant toutes ces valeurs.
    Mais vu que php est coté serveur et javascript coté client, je me demande comment je pourrais faire pour remplir mes listes déroulantes avec ces valeurs afin de ne pas les renseigner en dur dans le code...

    Merci d'avance...

    Edit : Je rajoute mon code histoire que ça soit plus clair

    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
     
    $db_famille = new class_DB;
    			$q_famille = "select * from famille_article "; 
    			$q_famille .= "where famille_parent = '0' "; 
    			$q_famille .= "order by famille_name";
    			//print $q_famille;
    			$db_famille->query($q_famille);
    			while ($db_famille->next_record()) {
    				$famille[$db_famille->f('famille_id')] = $db_famille->f('famille_name');
     
    				$db_sfamille = new class_DB;
    				$q_sfamille = "select * from famille_article "; 
    				$q_sfamille .= "where famille_parent = '".$db_famille->f('famille_id')."' and famille_parent != '0' "; 
    				$q_sfamille .= "order by famille_name";
    				$db_sfamille->query($q_sfamille);
    				if ($db_sfamille->num_rows()!=0) {
    					while ($db_sfamille->next_record()) {
    						$sfamille[$db_sfamille->f('famille_id')] = $db_sfamille->f('famille_name');
    						$famille_xref[$db_famille->f('famille_id')] = $db_sfamille->f('famille_id');
    					}
    				}
    			}
     
    <select onChange="javascript:liste_sfamille()" id="article_famille" name="article_famille">
    	<option value="0">Choisissez une famille</option>
    	<option value="1">Famille 1</option>
    	<option value="2">Famille 2</option>
    </select>
     
    <select id="article_sfamille" name="article_famille">
    	<option value="0">Choisissez une sous-famille</option>
    </select>
     
    <script language="javascript" type="text/javascript">
    <!--
    	function liste_sfamille() {
    		var ind_famille=document.getElementById('article_famille').selectedIndex;
    		var id_famille=document.getElementById('article_famille').options[ind_famille].value;
    		var sfamille=document.getElementById('article_sfamille');
     
    		sfamille.options.length=0;
     
    		switch(id_famille)
    		{
    			case "0":
    				<?php
                                    foreach($famille as $id => $value)
                                            echo "sfamille.options[sfamille.options.length] = new Option('".$value."','".$id."');\n";
                                    ?>  
    				//sfamille.options[sfamille.options.length] = new Option('test','01');
    			break;
    		}
    	}
    -->
    </script>
    Voila donc ma fonction... seulement je n'arrive pas à récupere mon tableau $famille que j'ai créer plus haut dans mon code php.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Comme tu le dis très justement, php est côté serveur, et js côté client. Ce qui fait que autant php peut transmettre des variables à js, autant l'inverse est impossible (ou, plus exactement, était impossible).
    Comment ça se passe ? Tu utilises php pour produire du code js. Exemple : avec php, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'var test_js="'.$test_php.'";'
    Tu as donc fait passer le contenu de ta variable php $test_php à la variable js test_js.
    Quand le script js s'exécutera, la variable test_js contiendra donc cette valeur. Ce qui nous permet de faire passer à un script js les valeurs contenues dans une bdd, du moins tant que le script php n'est pas terminé.

    Si j'ai bien compris, tu veux que les options de ton 2e select soient liées à l'option sélectionnée de ton 1er select. Si les select sont peu nombreux, on peut imaginer passer par cette méthode : si a est sélectionné, affiche a1,a2,a3, si b est sélectionné, affiche b1 et b2...
    Cependant, si le nombre de select est élevé ou si, pire, tu as un select multiple ou plus de 2 select liés, le nombre de combinaisons possible devient exponentiel...
    Il faut donc utiliser une autre méthode, le XMLHttpRequest. En 2 mots, cela consiste à effectuer via js une requete vers un script (notamment php), à attendre la réponse, et à récupérer la réponse du script, entre autre sous forme de texte affichable. Il suffit après d'un innerHTML, et le contenu de la page a changé... sans rechargement de la page. Et c'est d'une rapidité redoutable. Par exemple, j'ai 2 listes à sélection multiples liées entre elles, remplies par 2 tables de près de 1000 lignes. La modification de la 2e liste est instantannée...
    Pour en savoir plus, je te renvoie au code source que j'ai posté dans la partie code source de ce forum.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Par défaut
    Pb résolu...

    en fait c'est juste que ma variable php était écrasé entre temps et que ce n'était plus un tableau mais une chaine de caractères.

    Dsl

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

Discussions similaires

  1. [PHP-JS] Création de liste déroulante dynamique
    Par eeckhout dans le forum Langage
    Réponses: 2
    Dernier message: 28/02/2006, 13h41
  2. récupérer la valeur d'une liste déroulante dynamique
    Par grinder59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 23/01/2006, 17h51
  3. [HTML] liste déroulante dynamique
    Par lacousinee dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/08/2005, 20h51
  4. Liste déroulante dynamique ?
    Par Regis.C dans le forum Composants
    Réponses: 5
    Dernier message: 29/06/2005, 12h09
  5. [FORMULAIRE] Liste déroulante dynamique
    Par bchristo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/01/2005, 10h07

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