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

AJAX Discussion :

Affichage d'un select si sa valeur n'est pas NULL


Sujet :

AJAX

  1. #1
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut Affichage d'un select si sa valeur n'est pas NULL
    Bonjour à tous et à toutes,
    Je souhaiterez afficher un select chargé en ajax que si sa valeur est différente de NULL mais j'ai beau essayer je n'arrive pas vraiment au résultat voulu.
    Dans l'idéale il vaudrait que le select s'affiche que si sa valeur est différente de NULL, aussi non j'affiche le bouton de validation.
    Pour une sélection de produit j'ai cinq finitions possible.
    J'ai donc cinq select en tous mais les deux dernier peuvent être NULL car tous mes produits non pas cinq finitions possible, parfois il peut y en avoir que trois ou quatre.

    Dans ma bdd les champs des produits ou il n'y a pas de quatrième et/ou de cinquième finition sont rempli NULL.
    Dans le css l'affichage est à none.
    Ca fonctionne presque mais il me manque un petit je ne sais quoi pour que tous fonctionne correctement.

    Voici mon script qui charge et affiche les select

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
     
    function requestfinition_1() 
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.options[listfinition_1.selectedIndex].value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readData(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_1.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1=" + valuefinition_1);
    	}
    function requestfinition_2()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.options[listfinition_1.selectedIndex].value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.options[listfinition_2.selectedIndex].value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_2(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_2.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2);
    	}
    function requestfinition_3()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.options[listfinition_1.selectedIndex].value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.options[listfinition_2.selectedIndex].value;
    		var listfinition_3 = document.getElementById('finition_3Select');
    		var valuefinition_3 = listfinition_3.options[listfinition_3.selectedIndex].value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_3(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_3.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2+"&Idfinition_3="+valuefinition_3);
    		if (valuefinition_3 != "NULL")
    			{
    				document.getElementById("Select4").style.display = "inline";
    				document.getElementById("Select5").style.display = "none";
    				document.getElementById("slection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("Select4").style.display = "none";
    				document.getElementById("Select5").style.display = "none";
    				document.getElementById("slection_choisi").style.display = "inline";
    			}
    	}
    function requestfinition_4()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.options[listfinition_1.selectedIndex].value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.options[listfinition_2.selectedIndex].value;
    		var listfinition_3 = document.getElementById('finition_3Select');
    		var valuefinition_3 = listfinition_3.options[listfinition_3.selectedIndex].value;
    		var listfinition_4 = document.getElementById('finition_4Select');
    		var valuefinition_4 = listfinition_4.options[listfinition_4.selectedIndex].value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_4(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_4.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2+"&Idfinition_3="+valuefinition_3+"&Idfinition_4="+valuefinition_4);
    		if (valuefinition_4 != "NULL")
    			{
    				document.getElementById("Select4").style.display = "inline";
    				document.getElementById("Select5").style.display = "none";
    				document.getElementById("slection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("Select4").style.display = "none";
    				document.getElementById("Select5").style.display = "none";
    				document.getElementById("slection_choisi").style.display = "inline";
    			}
    	}
    function readData(oData)
    	{
    		var nodes   = oData.getElementsByTagName("item");
    		var oSelect = document.getElementById("finition_2Select");
    		var oOption, oInner;
    		oSelect.innerHTML = "";
    		for (var i=0, c=nodes.length; i<c; i++)
    			{
    				oOption = document.createElement("option");
    				oInner  = document.createTextNode(nodes[i].getAttribute("name"));
    				oOption.value = nodes[i].getAttribute("id");
    				oOption.appendChild(oInner);
    				oSelect.appendChild(oOption);
    			}
    	}
    function readDatafinition_2(oDatafinition_2)
    	{
    		var nodesfinition_2 = oDatafinition_2.getElementsByTagName("item");
    		var oSelectfinition_2 = document.getElementById("finition_3Select");
    		var oOptionfinition_2, oInnerfinition_2;
    		oSelectfinition_2.innerHTML = "";
    		for (var i=0, c=nodesfinition_2.length; i<c; i++)
    			{
    				oOptionfinition_2 = document.createElement("option");
    				oInnerfinition_2  = document.createTextNode(nodesfinition_2[i].getAttribute("name"));
    				oOptionfinition_2.value = nodesfinition_2[i].getAttribute("id");
    				oOptionfinition_2.appendChild(oInnerfinition_2);
    				oSelectfinition_2.appendChild(oOptionfinition_2);
    			}
    	}
    function readDatafinition_3(oDatafinition_3)
    	{
    		var nodesfinition_3 = oDatafinition_3.getElementsByTagName("item");
    		var oSelectfinition_3 = document.getElementById("finition_4Select");
    		var oOptionfinition_3, oInnerfinition_3;
    		oSelectfinition_3.innerHTML = "";
    		for (var i=0, c=nodesfinition_3.length; i<c; i++)
    			{
    				oOptionfinition_3 = document.createElement("option");
    				oInnerfinition_3  = document.createTextNode(nodesfinition_3[i].getAttribute("name"));
    				oOptionfinition_3.value = nodesfinition_3[i].getAttribute("id");
    				oOptionfinition_3.appendChild(oInnerfinition_3);
    				oSelectfinition_3.appendChild(oOptionfinition_3);
    			}
    	}
    function readDatafinition_4(oDatafinition_4)
    	{
    		var nodesfinition_4 = oDatafinition_4.getElementsByTagName("item");
    		var oSelectfinition_4 = document.getElementById("finition_5Select");
    		var oOptionfinition_4, oInnerfinition_4;
    		oSelectfinition_4.innerHTML = "";
    		for (var i=0, c=nodesfinition_4.length; i<c; i++)
    			{
    				oOptionfinition_4 = document.createElement("option");
    				oInnerfinition_4  = document.createTextNode(nodesfinition_4[i].getAttribute("name"));
    				oOptionfinition_4.value = nodesfinition_4[i].getAttribute("id");
    				oOptionfinition_4.appendChild(oInnerfinition_4);
    				oSelectfinition_4.appendChild(oOptionfinition_4);
    			}
    	}
    function selection_ok(valeur)
    	{
    		if (valeur=='none')
    			{
    				document.getElementById("slection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("slection_choisi").style.display = "inline";
    			}
    	}
    requestfinition_1 et requestfinition_2 ne sont jamais NULL mais requestfinition_3 et requestfinition_4 peuvent l'être.
    Merci de votre aide.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    tu es en train de mettre en place des listes liées et ta façon de procéder n'est pas des meilleurs, duplication inutile des fonctions.
    Il y a tous pleins de discussions résolues à ce sujet.

    Pourquoi ne pas retourner du code HTML déjà formé, ou encore un objet JSON.

    Ca fonctionne presque mais il me manque un petit je ne sais quoi pour que tous fonctionne correctement.
    mais encore que souhaites-tu obtenir.

  3. #3
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    bonjour NoSmoking et merci de ton aide.
    J'irai voir comment simplifier mes fonction plus tard, en attendant je voudrai que mes deux dernière liste (select) ne s'affiche que si leurs valeurs n'est pas NULL et si elles sont NULL il faudrait que le bouton "OK" s'affiche à la place.

    Ex : je sélectionne un produit et je suis redirigé sur une page qui affiche trois select.
    le premier select affiche une première option quand on choisi l'option 1 le deuxième select affiche la deuxième option quand on à choisi l'option 2 le troisième select affiche la troisième option, jusque la rien de bien spécial.
    Je voudrai si il y a une quatrième option que le quatrième select s'affiche et si il n'y a pas de quatrième option je voudrai que le bouton pour lancer la recherche s'affiche à la place.
    Idem pour le cinquième select.

    J'espère être assez explicite.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Que signifie pour toi
    ne s'affiche que si leurs valeurs n'est pas NULL
    • pas d'options disponibles
    • pas de réponse en retour

    Une solution consisterait à avoir ton <select> masqué et à ne l'afficher que si il a des <option>.

    Exemple de fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function showHideSelect(){
      var oSelect = document.querySelectorAll('SELECT');
      var i, nb = oSelect.length;
      for( i =0; i <nb; i +=1){
        oSelect[i].style.display = oSelect[i].options.length ? 'inline-block' : 'none';
      }
    }

  5. #5
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    Je veux dire par NULL qu'il n'y a pas d'options disponibles. Dans ma bdd j'ai mît en NULL les champs vide

  6. #6
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    Voici ma troisième et quatrième fonction qui affiche le select 4 et 5.
    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
    70
    71
    72
    73
     
    function requestfinition_3()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.options[listfinition_1.selectedIndex].value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.options[listfinition_2.selectedIndex].value;
    		var listfinition_3 = document.getElementById('finition_3Select');
    		var valuefinition_3 = listfinition_3.options[listfinition_3.selectedIndex].value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_3(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_3.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2+"&Idfinition_3="+valuefinition_3);
    		if (valuefinition_3 != "NULL")
    			{
    				document.getElementById("Select4").style.display = "inline";
    				document.getElementById("slection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("Select4").style.display = "none";
    				document.getElementById("slection_choisi").style.display = "inline";
    			}
    	}
    function requestfinition_4()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.options[listfinition_1.selectedIndex].value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.options[listfinition_2.selectedIndex].value;
    		var listfinition_3 = document.getElementById('finition_3Select');
    		var valuefinition_3 = listfinition_3.options[listfinition_3.selectedIndex].value;
    		var listfinition_4 = document.getElementById('finition_4Select');
    		var valuefinition_4 = listfinition_4.options[listfinition_4.selectedIndex].value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_4(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_4.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2+"&Idfinition_3="+valuefinition_3+"&Idfinition_4="+valuefinition_4);
    		if (valuefinition_4 != "NULL")
    			{
    				document.getElementById("Select5").style.display = "inline";
    				document.getElementById("slection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("Select5").style.display = "none";
    				document.getElementById("slection_choisi").style.display = "inline";
    			}
    	}
    Je dis que ça fonctionne presque car :
    quand la valeur du quatrième select est NULL il s'affiche alors qu'il ne devrait pas mais si on sélectionne NULL le cinquième select ne s'affiche pas et le bouton s'affiche comme prévu.
    Si il y a une option et qu'on la sélectionne, le cinquième select s'affiche et le bouton ne s'affiche pas comme prévu.

    Il faudrait que le quatrième select s'affiche uniquement si il y a une option

  7. #7
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    personne ne peux m'aider à afficher un select si sa valeur n'est pas vide ?
    Je devient fou je n'y comprend plus rien.

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Il me semble que je t'ai proposé une fonction pour afficher/masquer ton <select>.

    Ton code devient illisible, difficile à lire
    J'irai voir comment simplifier mes fonction plus tard,
    pas sûr que cela soit la bonne façon de faire !


    de plus une ligne comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var valuefinition_1 = listfinition_1.options[listfinition_1.selectedIndex].value;
    peut s"écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var valuefinition_1 = listfinition_1.value;
    Comment récupérer la valeur d'un select ?

  9. #9
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je ne suis pas très sûr mais il me semble il suffit de faire un simple contrôle dans les fonctions readDataxxxxx() sur l'attribut id retourné, non? comme ça?
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        for (var i=0, c=nodes.length; i<c; i++) {
            if (nodes[i].getAttribute("id") != null || nodes[i].getAttribute("id") != "") {
                oOption = document.createElement("option");
                oInner  = document.createTextNode(nodes[i].getAttribute("name"));
                oOption.value = nodes[i].getAttribute("id");
                oOption.appendChild(oInner);
                oSelect.appendChild(oOption);
            }
        }

  10. #10
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    Merci à vous deux.
    Je vais bien lire se que me propose NoSmoking pour voir si j'arrive à adapter un truc.
    Merci à toi tsuji mais ton script ne change pas grand chose, je l'ai peut être mal adapté.
    A la place de NULL dans ma bdd j'ai mit afficher-les-tarifs pour faire un semblant de truc et surtout pouvoir afficher mes tarifs mais c'est pas top.
    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
     
    function readDatafinition_3(oDatafinition_3)
    	{
    		var nodesfinition_3 = oDatafinition_3.getElementsByTagName("item");
    		var oSelectfinition_3 = document.getElementById("finition_4Select");
    		var oOptionfinition_3, oInnerfinition_3;
    		oSelectfinition_3.innerHTML = "";
    		for (var i=0, c=nodesfinition_3.length; i<c; i++) {
    			if (nodesfinition_3[i].getAttribute("id") != null || nodesfinition_3[i].getAttribute("id") != "afficher-les-tarifs") {
    				oOptionfinition_3 = document.createElement("option");
    				oInnerfinition_3  = document.createTextNode(nodesfinition_3[i].getAttribute("name"));
    				oOptionfinition_3.value = nodesfinition_3[i].getAttribute("id");
    				oOptionfinition_3.appendChild(oInnerfinition_3);
    				oSelectfinition_3.appendChild(oOptionfinition_3);
    			}
    		}
    	}
    Merci NoSmoking pour ta fonction mais je n'ai pas bien compris comment la mettre, de plus mes select sont déjà caché, je voudrai qu'ils s'affichent seulement si il y a une option à proposer.

  11. #11
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Quant je pense ça devrait marcher ou presque ... Qu'est-ce qu'au juste que la bdd fait signe, comme indicateur, que "sa valeur est NULL" ou, au contraire en niant la indicateur, que "sa valeur n'est pas NULL". Donnez un exemple en montrant ce que c'est la réponse avant les lignes readDataxxx(xhr.responseXML), par ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        alert(xhr.responseText);

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    (...)de plus mes select sont déjà caché, je voudrai qu'ils s'affichent seulement si il y a une option à proposer.
    c'est la même fonction mais tu peux faire plus light, par ewxemple
    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
    function readDatafinition(id_select, data) {
        var items = data.getElementsByTagName('item');
        var oSelect = document.getElementById(id_select);
        var oOption, oInner;
        var i, nb = items.length;
        oSelect.innerHTML = '';
        for (i = 0; i < nb; i += 1) {
            if (items[i].getAttribute('id') != null || items[i].getAttribute('id') != 'afficher-les-tarifs') {
                oOption = document.createElement('option');
                oInner = document.createTextNode(items[i].getAttribute('name'));
                oOption.value = items[i].getAttribute('id');
                oOption.appendChild(oInner);
                oSelect.appendChild(oOption);
            }
        }
        // affiche si option(s) présente(nt)
        if (nb) {
            oSelect.style.display = 'inline-block';
        }
    }
    profites pour observer les paramètres passés à la fonction, cela te permets de ne pas re-écire la même fonction à chaque fois.

    Une question quand même quand fais tu tes appels pour que tes listes soient liées ?

    A voir peut être pour information :
    Créer des listes déroulantes liées entre elles sans utiliser Ajax

  13. #13
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    Salut NoSmoking, merci de ton aide et de ta patience.
    J'ai copier coller ta fonction bêtement en modifiant dans ma fonction le nom de l'appel de ma fonction pour la tienne mais arrivé au quatrième select ça cherche (le loader tourne) mais rien ne se passe.
    Je suis désolé de mon niveau médiocre en js, j’essaie de comprendre.
    Pour répondre à ta question "comment je fait appels pour que mes listes soit liées, je vais te montrer mon code étape par étape ce sera moi lourd.
    Voici le début de mon formulaire qui affiche le premier select
    Code php : 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
    <?php
    echo'<div class="block_sous_menu">
            <form id="formulaire-finition" method="post" class="new_visform" action="'.ROOTPATH.'/tarif-imprimerie.html">
    		<input type="hidden" name="choix_produit" value="'.htmlspecialchars($_GET['maquette']).'"/>
    		<span class="text_selection"> Papier et finition</span>';
    			echo'<span class="custom-dropdown custom-dropdown--white custom-dropdown--small"> 
    			<select name="finition_1" class="custom-dropdown__select custom-dropdown__select--white" id="finition_1Select" onchange="requestfinition_1(this);">
    				<option value="none">Option 1</option>';
    				mysql_set_charset("utf8");
    				$reponse_produits = $bdd->prepare('SELECT papier, lien_papier FROM detail_produit_imprimerie 
    				WHERE lien_produit = :produit GROUP BY papier ORDER BY papier ASC');
    				$reponse_produits->bindValue('produit', $_GET['maquette'], PDO::PARAM_STR);
    				$reponse_produits->execute();
    				while ($back_produits = $reponse_produits->fetch())
    					{
    						echo '<option value="'.$back_produits['lien_papier'].'">'.stripslashes($back_produits['papier']).'</option>\n';
    					}
    				$reponse_produits->closeCursor();
    			echo'</select></span> ';?>
    Voici maintenant la fonction requestfinition_1 qui est dans mon fichier systeme_recherche.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
    function requestfinition_1() 
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readData(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_1.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1=" + valuefinition_1);
    	}
    Mon script ajax_finition_1.php qui va chercher dans la bdd
    Code php : 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
    <?php
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    echo "<list>";
    $Idfinition_1 = (isset($_POST["Idfinition_1"])) ? ($_POST["Idfinition_1"]) : NULL;
    if ($Idfinition_1)
    	{
    		include('../includes/identifiants.php');
    		mysql_set_charset("utf8");
    		$requete_finition_1 = $bdd->prepare("SELECT type, lien_type FROM detail_produit_imprimerie 
    		WHERE lien_papier = :Idfinition_1 GROUP BY type ORDER BY type");
    		$requete_finition_1->bindValue('Idfinition_1', $Idfinition_1, PDO::PARAM_STR);
    		$requete_finition_1->execute();
    		echo "<item id=\" \" name=\"Choix 2\" />";
    		while ($back_finition_1 = $requete_finition_1->fetch())
    			{
    				echo "<item id=\"".$back_finition_1["lien_type"] . "\" name=\"" . $back_finition_1["type"] . "\" />";
    			}
    		$requete_finition_1->closeCursor();
    	}
    echo "</list>";
    ?>
    et la fonction readData appelé dans la fonction requestfinition_1
    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
    function readData(oData)
    	{
    		var nodes   = oData.getElementsByTagName("item");
    		var oSelect = document.getElementById("finition_2Select");
    		var oOption, oInner;
    		oSelect.innerHTML = "";
    		for (var i=0, c=nodes.length; i<c; i++)
    			{
    				oOption = document.createElement("option");
    				oInner  = document.createTextNode(nodes[i].getAttribute("name"));
    				oOption.value = nodes[i].getAttribute("id");
    				oOption.appendChild(oInner);
    				oSelect.appendChild(oOption);
    			}
    	}
    je fais la même chose pour tout les select en ajoutant à chaque fois les nouvelles variable.
    Voici le code complet
    le formulaire
    Code php : 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
    <?php
    echo'<div class="block_sous_menu">
            <form id="formulaire-finition" method="post" class="new_visform" action="'.ROOTPATH.'/tarif-imprimerie.html">
    		<input type="hidden" name="choix_produit" value="'.htmlspecialchars($_GET['maquette']).'"/>
    		<span class="text_selection"> Papier et finition</span>';
    			echo'<span class="custom-dropdown custom-dropdown--white custom-dropdown--small"> 
    			<select name="finition_1" class="custom-dropdown__select custom-dropdown__select--white" id="finition_1Select" onchange="requestfinition_1(this);">
    				<option value="none">Option 1</option>';
    				mysql_set_charset("utf8");
    				$reponse_produits = $bdd->prepare('SELECT papier, lien_papier FROM detail_produit_imprimerie 
    				WHERE lien_produit = :produit GROUP BY papier ORDER BY papier ASC');
    				$reponse_produits->bindValue('produit', $_GET['maquette'], PDO::PARAM_STR);
    				$reponse_produits->execute();
    				while ($back_produits = $reponse_produits->fetch())
    					{
    						echo '<option value="'.$back_produits['lien_papier'].'">'.stripslashes($back_produits['papier']).'</option>\n';
    					}
    				$reponse_produits->closeCursor();
    			echo'</select></span> ';
     
    			echo'<span class="custom-dropdown custom-dropdown--white custom-dropdown--small">
    			<select class="custom-dropdown__select custom-dropdown__select--white" id="finition_2Select" name="finition_2" onchange="requestfinition_2(this);">
    				<option value="none">Option 2</option>
    			</select></span> ';
     
    			echo'<span class="custom-dropdown custom-dropdown--white custom-dropdown--small">
    			<select class="custom-dropdown__select custom-dropdown__select--white" id="finition_3Select" name="finition_3" onchange="requestfinition_3(this)">
    				<option value="none">Option 3</option>
    			</select></span> ';
     
    			echo'<span class="custom-dropdown custom-dropdown--white custom-dropdown--small" id="Select4">
    			<select class="custom-dropdown__select custom-dropdown__select--white" id="finition_4Select" name="finition_4" onchange="requestfinition_4(this)">
    				<option value="none">Option 4</option>
    			</select></span> ';
     
    			echo'<span class="custom-dropdown custom-dropdown--white custom-dropdown--small" id="Select5">
    			<select class="custom-dropdown__select custom-dropdown__select--white" id="finition_5Select" name="finition_5" onchange="selection_ok(this.value)">
    				<option value="none">Option 5</option>
    			</select></span> ';
    			echo'<span id="chargement" style="display:none;"><img src="'.ROOTPATH.'/images/chargement.gif" alt="Chargement" /></span>';
    			echo' <input class="new_visBtnCon" id="selection_choisi" type="submit" value="ok" name="ok"/>';
    		echo'</form></div>';?>
    Le fichier systeme_recherche.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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    function requestfinition_1() 
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readData(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_1.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1=" + valuefinition_1);
    	}
    function requestfinition_2()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_2(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_2.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2);
    	}
    function requestfinition_3()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.value;
    		var listfinition_3 = document.getElementById('finition_3Select');
    		var valuefinition_3 = listfinition_3.value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_3(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_3.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2+"&Idfinition_3="+valuefinition_3);
    		if (valuefinition_3 != "afficher-les-tarifs")
    			{
    				document.getElementById("Select4").style.display = "inline-block";
    				document.getElementById("selection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("Select4").style.display = "none";
    				document.getElementById("Select5").style.display = "none";
    				document.getElementById("selection_choisi").style.display = "inline";
    			}
    	}
    function requestfinition_4()
    	{
    		var listfinition_1 = document.getElementById('finition_1Select');
    		var valuefinition_1 = listfinition_1.value;
    		var listfinition_2 = document.getElementById('finition_2Select');
    		var valuefinition_2 = listfinition_2.value;
    		var listfinition_3 = document.getElementById('finition_3Select');
    		var valuefinition_3 = listfinition_3.value;
    		var listfinition_4 = document.getElementById('finition_4Select');
    		var valuefinition_4 = listfinition_4.value;
    		var xhr   = getXMLHttpRequest();
    		xhr.onreadystatechange = function()
    			{
    				if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    					{
    						readDatafinition_4(xhr.responseXML);
    						document.getElementById("chargement").style.display = "none";
    					}
    				else if (xhr.readyState < 4)
    					{
    						document.getElementById("chargement").style.display = "inline";
    					}
    			};
    		xhr.open("POST","../insert/ajax_finition_4.php",true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send("Idfinition_1="+valuefinition_1+"&Idfinition_2="+valuefinition_2+"&Idfinition_3="+valuefinition_3+"&Idfinition_4="+valuefinition_4);
    		if (valuefinition_4 != "afficher-les-tarifs")
    			{
    				document.getElementById("Select5").style.display = "inline-block";
    				document.getElementById("selection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("Select5").style.display = "none";
    				document.getElementById("selection_choisi").style.display = "inline";
    			}
    	}
    function readData(oData)
    	{
    		var nodes   = oData.getElementsByTagName("item");
    		var oSelect = document.getElementById("finition_2Select");
    		var oOption, oInner;
    		oSelect.innerHTML = "";
    		for (var i=0, c=nodes.length; i<c; i++)
    			{
    				oOption = document.createElement("option");
    				oInner  = document.createTextNode(nodes[i].getAttribute("name"));
    				oOption.value = nodes[i].getAttribute("id");
    				oOption.appendChild(oInner);
    				oSelect.appendChild(oOption);
    			}
    	}
    function readDatafinition_2(oDatafinition_2)
    	{
    		var nodesfinition_2 = oDatafinition_2.getElementsByTagName("item");
    		var oSelectfinition_2 = document.getElementById("finition_3Select");
    		var oOptionfinition_2, oInnerfinition_2;
    		oSelectfinition_2.innerHTML = "";
    		for (var i=0, c=nodesfinition_2.length; i<c; i++)
    			{
    				oOptionfinition_2 = document.createElement("option");
    				oInnerfinition_2  = document.createTextNode(nodesfinition_2[i].getAttribute("name"));
    				oOptionfinition_2.value = nodesfinition_2[i].getAttribute("id");
    				oOptionfinition_2.appendChild(oInnerfinition_2);
    				oSelectfinition_2.appendChild(oOptionfinition_2);
    			}
    	}
    function readDatafinition_3(oDatafinition_3)
    	{
    		var nodesfinition_3 = oDatafinition_3.getElementsByTagName("item");
    		var oSelectfinition_3 = document.getElementById("finition_4Select");
    		var oOptionfinition_3, oInnerfinition_3;
    		oSelectfinition_3.innerHTML = "";
    		for (var i=0, c=nodesfinition_3.length; i<c; i++)
    			{
    				oOptionfinition_3 = document.createElement("option");
    				oInnerfinition_3  = document.createTextNode(nodesfinition_3[i].getAttribute("name"));
    				oOptionfinition_3.value = nodesfinition_3[i].getAttribute("id");
    				oOptionfinition_3.appendChild(oInnerfinition_3);
    				oSelectfinition_3.appendChild(oOptionfinition_3);
    			}
    }
    function readDatafinition_4(oDatafinition_4)
    	{
    		var nodesfinition_4 = oDatafinition_4.getElementsByTagName("item");
    		var oSelectfinition_4 = document.getElementById("finition_5Select");
    		var oOptionfinition_4, oInnerfinition_4;
    		oSelectfinition_4.innerHTML = "";
    		for (var i=0, c=nodesfinition_4.length; i<c; i++)
    			{
    				oOptionfinition_4 = document.createElement("option");
    				oInnerfinition_4  = document.createTextNode(nodesfinition_4[i].getAttribute("name"));
    				oOptionfinition_4.value = nodesfinition_4[i].getAttribute("id");
    				oOptionfinition_4.appendChild(oInnerfinition_4);
    				oSelectfinition_4.appendChild(oOptionfinition_4);
    			}
    	}
    function selection_ok(valeur)
    	{
    		if (valeur=='none')
    			{
    				document.getElementById("selection_choisi").style.display = "none";
    			}
    		else
    			{
    				document.getElementById("selection_choisi").style.display = "inline";
    			}
    	}
    et mes quatres fichier d'appele à la bdd
    Code php : 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
    <?php
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    echo "<list>";
    $Idfinition_1 = (isset($_POST["Idfinition_1"])) ? ($_POST["Idfinition_1"]) : NULL;
    if ($Idfinition_1)
    	{
    		include('../includes/identifiants.php');
    		mysql_set_charset("utf8");
    		$requete_finition_1 = $bdd->prepare("SELECT type, lien_type FROM detail_produit_imprimerie 
    		WHERE lien_papier = :Idfinition_1 GROUP BY type ORDER BY type");
    		$requete_finition_1->bindValue('Idfinition_1', $Idfinition_1, PDO::PARAM_STR);
    		$requete_finition_1->execute();
    		echo "<item id=\" \" name=\"Choix 2\" />";
    		while ($back_finition_1 = $requete_finition_1->fetch())
    			{
    				echo "<item id=\"".$back_finition_1["lien_type"] . "\" name=\"" . $back_finition_1["type"] . "\" />";
    			}
    		$requete_finition_1->closeCursor();
    	}
    echo "</list>";
    ?>
    Code php : 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
    <?php
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    echo "<list>";
    $idfinition_1 = (isset($_POST["Idfinition_1"])) ? $_POST["Idfinition_1"] : NULL;
    $idfinition_2 = (isset($_POST["Idfinition_2"])) ? $_POST["Idfinition_2"] : NULL;
     
    if (($idfinition_1) && ($idfinition_2))
    	{
    		include('../includes/identifiants.php');
    		mysql_set_charset("utf8");
    		$requete_finition_2 = $bdd->prepare("SELECT finition, lien_finition FROM detail_produit_imprimerie 
    		WHERE lien_papier = :finition_1 AND lien_type = :finition_2 GROUP BY finition ORDER BY finition");
    		$requete_finition_2->bindValue('finition_1', $idfinition_1, PDO::PARAM_STR);
    		$requete_finition_2->bindValue('finition_2', $idfinition_2, PDO::PARAM_STR);
    		$requete_finition_2->execute();
    		echo "<item id=\" \" value=\"none\" name=\"Choix 3\" />";
    		while ($back_finition_2 = $requete_finition_2->fetch())
    			{
    				echo "<item id=\"".$back_finition_2["lien_finition"] . "\" name=\"" . $back_finition_2["finition"] . "\" />";
    			}
    		$requete_finition_2->closeCursor();
    	}
    echo "</list>";
    ?>
    Code php : 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
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
     
    $idfinition_1 = (isset($_POST["Idfinition_1"])) ? $_POST["Idfinition_1"] : NULL;
    $idfinition_2 = (isset($_POST["Idfinition_2"])) ? $_POST["Idfinition_2"] : NULL;
    $idfinition_3 = (isset($_POST["Idfinition_3"])) ? $_POST["Idfinition_3"] : NULL;
    if (($idfinition_1) && ($idfinition_2) && ($idfinition_3))
    	{
    		include('../includes/identifiants.php');
    		mysql_set_charset("utf8");
    		$requete_finition_3 = $bdd->prepare("SELECT type_finition, lien_type_finition FROM detail_produit_imprimerie 
    		WHERE lien_papier = :finition_1 AND lien_type = :finition_2 AND lien_finition = :finition_3 GROUP BY type_finition ORDER BY type_finition");
    		$requete_finition_3->bindValue('finition_1', $idfinition_1, PDO::PARAM_STR);
    		$requete_finition_3->bindValue('finition_2', $idfinition_2, PDO::PARAM_STR);
    		$requete_finition_3->bindValue('finition_3', $idfinition_3, PDO::PARAM_STR);
    		$requete_finition_3->execute();
    		$res_liste4 = array(); // déclare le tableau
    		while ($back_finition_3 = $requete_finition_3->fetch())
    			{
    				$res_liste4[$back_finition_3['lien_type_finition']] = $back_finition_3['type_finition']; // alimente le tableau
    			}
    		$requete_finition_3->closeCursor();
     
    		echo "<list>";
    		echo "<item id=\" \" value=\"afficher-les-tarifs\" name=\"Choix 4\" />";
    		foreach ($res_liste4 as $key_liste4 => $resultat_liste4)
    			{
    				echo "<item id=\"".$key_liste4."\" name=\"".$res_liste4[$key_liste4]."\" />";
    			}
    		echo "</list>";		
    	}
    ?>
    Code php : 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
    <?php
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
     
    $idfinition_1 = (isset($_POST["Idfinition_1"])) ? $_POST["Idfinition_1"] : NULL;
    $idfinition_2 = (isset($_POST["Idfinition_2"])) ? $_POST["Idfinition_2"] : NULL;
    $idfinition_3 = (isset($_POST["Idfinition_3"])) ? $_POST["Idfinition_3"] : NULL;
    $idfinition_4 = (isset($_POST["Idfinition_4"])) ? $_POST["Idfinition_4"] : NULL;
    if (($idfinition_1) && ($idfinition_2) && ($idfinition_3) && ($idfinition_4))
    	{
    		include('../includes/identifiants.php');
    		mysql_set_charset("utf8");
    		$requete_finition_4 = $bdd->prepare("SELECT option_plus, lien_option_plus FROM detail_produit_imprimerie 
    		WHERE lien_papier = :finition_1 AND lien_type = :finition_2 AND lien_finition = :finition_3 AND lien_type_finition = :finition_4 
    		GROUP BY option_plus ORDER BY option_plus");
    		$requete_finition_4->bindValue('finition_1', $idfinition_1, PDO::PARAM_STR);
    		$requete_finition_4->bindValue('finition_2', $idfinition_2, PDO::PARAM_STR);
    		$requete_finition_4->bindValue('finition_3', $idfinition_3, PDO::PARAM_STR);
    		$requete_finition_4->bindValue('finition_4', $idfinition_4, PDO::PARAM_STR);
    		$requete_finition_4->execute();
    		echo "<list>";
    		echo "<item id=\" \" value=\"afficher-les-tarifs\" name=\"Choix 5\" />";
    		while ($back_finition_4 = $requete_finition_4->fetch())
    			{
    				echo "<item id=\"".$back_finition_4["lien_option_plus"] . "\" name=\"" . $back_finition_4["option_plus"] . "\" />";
    			}
    		echo "</list>";
    		$requete_finition_4->closeCursor();
    	}
     
    ?>
    et le css
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #selection_choisi, #Select4, #Select5 {
    	display:none;
    }

    Est ce que ta fonction readDatafinition remplace toutes les miennes ? readData, readDatafinition_2, readDatafinition_3 et readDatafinition_4

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bon ce que je te propose c'est d'essayer de simplifier tout cela car j'ai du mal à suivre

    • Commençons par le factorisation de ta fonction requête
    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
    /**
    * fonction requête commune
    * @param   {String}  url          : URL de la requête
    * @param   {String}  param        : les données à transmettre
    * @param   {String}  select_dest  : ID du <select> à mettre à jour
    **/
    function request(url, param, select_dest) {
        var xhr = getXMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                readData(select_dest, xhr.responseXML);
                document.getElementById('chargement').style.display = 'none';
            } 
            else if (xhr.readyState < 4) {
                document.getElementById('chargement').style.display = 'inline';
            }
        };
        xhr.open('POST', '../insert/' + url, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send(param);
    }
    • Cette fonction fait appel à la fonction readData que l'on définie ci dessous
    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
    /**
    * fonction mise à jour commune
    * @param   {String}  id_select  : ID du <select> à mettre à jour
    * @param   {String}  data       : données à traiter
    **/
    function readData(id_select, data) {
        var items = data.getElementsByTagName('item');
        var oSelect = document.getElementById(id_select);
        var oOption,  oInner;
        var i,  nb = items.length;
        // vide le select
        oSelect.options.length = 0;    
     
        for (i = 0; i < nb; i += 1) {
            if (items[i].getAttribute('id') != null || items[i].getAttribute('id') != 'afficher-les-tarifs') {
                oOption = document.createElement('option');
                oInner = document.createTextNode(items[i].getAttribute('name'));
                oOption.value = items[i].getAttribute('id');
                oOption.appendChild(oInner);
                oSelect.appendChild(oOption);
            }
        }
        // affiche si option(s) présente(nt)
        if (nb) {
            oSelect.style.display = 'inline-block';
        }
    }
    • Maintenant voyons comment appeler la fonction request, nous allons crer une fonction d'appel par <select> attendu que tu retransmets les valeurs de chacun d'eux. C'est pas ce qu'il y a de mieux mais bon ...
    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
    /**
    *  fonction sur onchange du premier <select>
    * @param {Object} le <select> lui-même via un this
    **/
    function request_1(obj) {
        if (obj.value) {
            // récupération des paramètres
            var oSelect = document.getElementById('finition_1Select');
            var param = 'Idfinition_1=' + oSelect.value;
            // lance la requête
            request('ajax_finition_1.php', param, 'finition_2Select');
        }
    }
    function request_2(obj) {
        if (obj.value) {
            // récupération des paramètres
            var oSelect = document.getElementById('finition_1Select');
            var param = 'Idfinition_1=' + oSelect.value;
            oSelect = document.getElementById('finition_2Select');
            param += '&Idfinition_2=' + oSelect.value;
            // lance la requête
            request('ajax_finition_2.php', param, 'finition_3Select');
        }
    }
    function request_3(obj) {
        if (obj.value) {
            // récupération des paramètres
            var oSelect = document.getElementById('finition_1Select');
            var param = 'Idfinition_1=' + oSelect.value;
            oSelect = document.getElementById('finition_2Select');
            param += '&Idfinition_2=' + oSelect.value;
            oSelect = document.getElementById('finition_3Select');
            param += '&Idfinition_3=' + oSelect.value;
            // lance la requête
            request('ajax_finition_3.php', param, 'finition_4Select');
        }
    }
    function request_4(obj) {
        if (obj.value) {
            // récupération des paramètres
            var oSelect = document.getElementById('finition_1Select');
            var param = 'Idfinition_1=' + oSelect.value;
            oSelect = document.getElementById('finition_2Select');
            param += '&Idfinition_2=' + oSelect.value;
            oSelect = document.getElementById('finition_3Select');
            param += '&Idfinition_3=' + oSelect.value;
            oSelect = document.getElementById('finition_4Select');
            param += '&Idfinition_4=' + oSelect.value;
            // lance la requête
            request('ajax_finition_4.php', param, 'finition_5Select');
        }
    }
    L'appel à ces fonctions se fera donc sur le onchange des <select>.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="finition_1" id="finition_1Select" onchange="request_1(this);">
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="finition_1" id="finition_2Select" onchange="request_2(this);">
    et ainsi de suite ...

    Voila déjà pour y voir plus clair.
    Restera à gérer les affichages et notamment celui de fin et sûrement différents petits aménagements.

    Je n'ai pas regardé le code coté serveur, après tout on est sur un forum JavaScript

  15. #15
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    Bonjour NoSmoking,
    J'ai donc modifié mon code pour le tien, j'ai modifié les onchange dans mon formulaire et enlevé le display none dans mon css.
    Actuellement tous les select s'affichent mais ça fonctionnes, reste à cacher les deux derniers pour qu'ils s'affichent uniquement si il y a une valeur à choisir (une option).

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Je vois que dans ton code serveur tu renvoies quoiqu'il arrive au moins un <item>, il te faut donc en tenir compte dans le test pour affichage.

    J'aurais plutôt tendance à gérer la 1st <option> côté client ce qui serait accessoirement plus simple à gérer dans ta boucle.

  17. #17
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 208
    Points : 118
    Points
    118
    Par défaut
    Bonjour NoSmoking,
    Je peux enlever le premier <item> ça pose pas de souci et dans ce cas on peux gérer le 1er <option> si il y a "afficher les tarifs" ou autre chose.
    Aller je vais essayer ça.

  18. #18
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Dans la fonction readData(id_select, data) tu peux ajouter la 1st option si des <item> ont été retournés, tu peux même ajouter un paramètre à la fonction si tu veux un titre personnalisé par <select>.

Discussions similaires

  1. [Débutant] Tester si une valeur n'est PAS un NaN
    Par Anna76 dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/09/2014, 11h20
  2. Réponses: 1
    Dernier message: 28/12/2013, 23h54
  3. La valeur n'est pas comprise dans la plage attendue.
    Par Sophie64 dans le forum SharePoint
    Réponses: 1
    Dernier message: 03/05/2010, 16h52
  4. [XSLT] tester que la valeur n'est pas
    Par DrDam dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 15/05/2008, 09h24
  5. Réponses: 8
    Dernier message: 16/04/2008, 16h03

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