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 imbriquée importée depuis une Bdd


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut Liste déroulante imbriquée importée depuis une Bdd
    Bonjour à tous,
    Je tente vainement de créer une liste déroulante me permettant de choisir dans une deuxieme liste déroulante des options différentes selon le choix que j'aurais fait dans ma premiere liste.

    Exemple dans ma Bdd :
    Global type

    Service collecte
    Service support
    Autres client
    Autres fournisseurs

    En choisissant "Service" dans ma 1 liste, je ne voudrais avoir le choix dans ma seconde qu' entre "collecte" et "support".

    Voici mon 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
    34
    $rqSql = "SELECT DISTINCT global_mat FROM tableau_recap";      
    $result = mysql_query($rqSql);
    // Construction de la chaîne de caractères qui fait la  liste
    $ld = "<SELECT NAME='Choix' onchange='this.ajout.submit()'>";
    $ld .= "<OPTION VALUE=0>Choisissez</OPTION>";
    // On boucle sur la table
    while ( $row = mysql_fetch_array( $result)) {
        $global_mat = $row["global_mat"];
        $ld .= "<OPTION VALUE='$global_mat'>$global_mat</OPTION>";
    }
    $ld .= "</SELECT>";
    print $ld;
     
    ?>
     
    </tr></table>
    <table><tr>
     
    <?
     
    //select onchange='this.form.submit()'
    $rqSql1= "SELECT type FROM tableau_recap WHERE global_mat='$Choix'";
    $result1 = mysql_query($rqSql1);
    $ld1 = "<SELECT NAME='Choix1' select onchange='this.ajout.submit()'>";
    $ld1 .= "<OPTION VALUE=0>Choisissez</OPTION>";
    // On boucle sur la table
    while ( $row1 = mysql_fetch_array( $result1)) {
        $type = $row1["type"];
        $ld1 .= "<OPTION VALUE='$type'>$type</OPTION>";
    }
    $ld1 .= "</SELECT >";
    print $ld1;
     
    ?>
    Une idée, un conseil, je suis preneur

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    a tu regarder sur developpez.com en faisant une recherche sur listes liées ainsi que sur le forum car c'est un sujer récurent
    Stay in Bed .. Save Energy

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Oui mais j'avoue avoir été un peu dérouté par les réponses des différents interlocuteurs. Aussi me suis je dit que si je discuté directement avec les personnes, l'illumination divine me toucherait peut-être....

    Je comprends nénamois qu'il doit être enervant de répondre tous les jours a la même question, aussi vais-je persister dans la lecture de ces posts.

    Merci quand même

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Je vais plancher là dessus, et je vous tiens au courant.
    Merci.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    J'ai réfléchi à vos solutions et j'ai décidé de plutot utilisé l'Ajax comme montré sur ce tuto :
    http://siddh.developpez.com/articles/ajax/

    Et là je me pose une question qui même à moi me parait bête...
    Dans le tuto, il part du principe qu'il a deux tables. Dans mon cas les choix devraient se faire sur deux champs d'une seule table.

    J'arrive a faire fonctionner le choix dans la premiere liste sans problème, mais cela n'entraine pas l'apparition des options de la deuxieme liste.

    Y aurait il une ame charitable pour expliquer le principe a appliquer

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    sorry coné pas l'ajax
    Stay in Bed .. Save Energy

  8. #8
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Salut,

    Ben c'est exactement pareil sauf qu'au lieu de faire ta seconde requete sur une autre table, tu la fais sur un autre champs de la même table et dans la clause where tu passe la valeur du premier champs...

    Ca va mieux comme ça?

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Ce qui me gene ( mais peut être que ca ne gène que moi ), c'est l'utilisation de plusieurs id.
    Il utilise la concordance de ces id pour choisir les differents valeurs de champs à afficher non ?

    Ici dans le fichier ajax il pose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
            echo "<select name='livre'>";
            if(isset($_POST["idAuteur"])){
                    mysql_connect("localhost","root","root");
                    mysql_select_db("test");
                    $res = mysql_query("SELECT id,titre FROM livre 
                            WHERE idAuteur=".$_POST["idAuteur"]." ORDER BY titre");
                    while($row = mysql_fetch_assoc($res)){
                            echo "<option value='".$row["id"]."'>".$row["titre"]."</option>";
                    }
            }
            echo "</select>";
    ?>
    Il faudrait donc poser :
    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
    <?php
    	echo "<select name='livre'>";
    	if(isset($_POST["Auteur"]))//car a priori c'est la seule chose qu'on est passé
                   {
    		mysql_connect("localhost","root","root");
    		mysql_select_db("test");
    		$res = mysql_query("SELECT livre FROM table 
    			WHERE Auteur=".$_POST["Auteur"]." 
                              ORDER BY titre");// On devrait pour l'enlever sans prob cet order non ?
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row["id"]."'>".$row["titre"]."</option>";// et là l'apparation de l'id me laisse pantois
    		}
    	}
    	echo "</select>";
    ?>
    Si je raconte trop de bêtises, n'hésitez pas à hurler !

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    Tu fais comme tu veux !
    Mais le principal c'est que ca suivent dans ton code javascript !!!

    utilise se code a la pace de la fonction getxhr() :

    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
     
     
    // Renvoie le texte de l'objet ActiveXObject le plus récent depuis une liste
    var pickRecentProgID = function (idList){
    	// found progID flag
        var bFound = false;
        for(var i=0; i < idList.length && !bFound; i++){
            try{
                var oDoc = new ActiveXObject(idList[i]);
                o2Store = idList[i];
                bFound = true;
            }catch (objException){
                // trap; try next progID
            };
        };
        if (!bFound)
    		throw ("Aucun ActiveXObject n'est valide sur votre ordinateur, pensez à mettre à jour votre navigateur");
        idList = null;
        return o2Store;
    }
     
    // Retourne un nouvel objet XmlHttpRequest
    var GetXmlHttpRequest_AXO=null
    var GetXmlHttpRequest=function () {
    	if (window.XMLHttpRequest) {
    		return new XMLHttpRequest()
    	}
    	else if (window.ActiveXObject) {
    		if (!GetXmlHttpRequest_AXO) {
    			GetXmlHttpRequest_AXO=pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]);
    		}
    		return new ActiveXObject(GetXmlHttpRequest_AXO)
    	}
    	return false;
    }
     
    // Compatibilité AJAX
    getXhr=GetXmlHttpRequest;
    voila j'espere ke ca ira ! moi g galéré mais now tout fonctionne !! héhé^^

  11. #11
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Bon après de multiples essais, tentatives d'utiliser Ajax etc...

    Je reviens vous embeter.


    Voci mon script 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
     
    function go(){
    				getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementByName('type').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajax.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				sel = document.getElementByName('tableau_recap');
    				global_mat = sel.options[sel.selectedIndex].value;
    				xhr.send("global_mat");
    			}
    Mon formulaire :

    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
    <form>
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Matos</label>
    				<select name='global_mat' onchange='go()'>
    					<option value='-1'>Aucun</option>
    					<?
    						$res = mysql_query("SELECT DISTINCT global_mat FROM tableau_recap ");
    						while($row = mysql_fetch_assoc($res)){
    							echo "<option value='".$row["global_mat"]."'>".$row["global_mat"]."</option>";
    						}
    					?>
    				</select>
    				<label>Type</label>
    				<div id='type' style='display:inline'>
    				<select name='type'>
    					<option value='-1'>Aucun</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    et mon fichier ajax.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    	echo "<select name='type'>";
    	if(isset($_POST["global_mat"])){
    		//mysql_connect("localhost","root","");
    		//mysql_select_db("npar");
    		$res = mysql_query("SELECT type FROM tableau_recap 
    			WHERE global_mat=".$_POST["global_mat"]. "ORDER BY 1");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row["type"]."'>".$row["type"]."</option>";
    		}
    	}
    	echo "</select>";
    ?>
    Ma premiere liste déroulante s'affiche sans problème, mais le choix dans cette liste n'entraine aucun réaction de ma page.
    Dans l'exemple dont je me suis inspiré, le choix se fait grace aux id correspondants dans les deux tables. Ici dans mon cas, ces id n'existent pas car j'agis sur deux champs d'une même table.

    J'ai donc essayé en jouant sur la valeur recupérée dans la 1ere liste (globabl_mat) mais sans grand succès.

    Bref, je rame ...
    Quelqu'un aurait une petite idée ?

    Merci.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    salut !
    tu as surement un pb ds ta ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    sel = document.getElementByName('tableau_recap');
    il faut mettre ici l'id de ton select!

    donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <select name='global_mat' id='global_mat' onchange='go()'>
    je ne suis pas sur mais essaye ca pour voir !

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Effectivement, il me manquait quelque chose.

    Néanmoins, ca ne fonctionne toujours pas.

    Les lignes qui me posent problème (pour la compréhension) sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sel = document.getElementById('tableau_recap');
    global_mat = sel.options[sel.selectedIndex].value;
    xhr.send("global_mat="+global_mat);

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    essaye pas mettre le meme nom pour le name et l'id :

    explication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    
    			
    <select name='global_mat_X' id='global_mat' onchange='go()'>
    
    <label>Type</label>
    <div id='type' style='display:inline'>
    <select name='type_X'></select>
    </div>
    aprs je ne vois pas trop !

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    ah oui aussi ! si t as changé la fonction getxhr() par le bout de code que j'ai mis plus haut !!

    il faut rajouter a t'as fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    function go()
    {
     // au debut
      var xhr = getXhr();
    
    }

  16. #16
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Ok j'ai fait les modifications proposées mais la page ne se charge toujours pas.

    Merci de te donner du mal pour mon petit bout de code.

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Ayant aucune connaissance en ajax je me rapelle que j'avaisproceder autrement et j'ai retrouver le code source qui m'avais servi

    http://php.developpez.com/sources/?p...ms#listesliees

    dsl pour cette réponse aussi tardive je ne sais pas si cela te seras utile mais on ne sait jamais bon courage
    Stay in Bed .. Save Energy

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    derniere soluce :

    Change de pc !!!

  19. #19
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Mouai je pense que le pc est pas en cause, je blamerais plutot le pseudo "programmeur" que je suis

    Je vais explorer ton code Boo, j'aurais peut-être une illumination

  20. #20
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Bon après moultes recherches, tentatives de codes et autres.

    Je vais commencer a penser qu'il faut deux tables distinctes pour avoir deux listes liées et qu'il n'est pas possible de le faire avec deux champs d'une seule table.
    J'ai regarder le code que Boo m'a conseillé, mais là aussi, il jour sur deux tables lieux et salle car elles sont liées par un id.
    Car je ne vois vraiment pas comment on peut lier deux champs entre eux sans passer par des id comme je souhaite le faire...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/04/2008, 14h20
  2. Liste déroulante + chargement partiel d'une page
    Par lamelfa dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/09/2006, 22h29
  3. Réponses: 5
    Dernier message: 12/06/2006, 10h27
  4. Réponses: 6
    Dernier message: 15/12/2005, 21h20
  5. Import d'une bdd éloquence avec interbase ou postgresql?
    Par Missvan dans le forum InterBase
    Réponses: 11
    Dernier message: 06/01/2004, 21h44

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