formulaire différent selon le choix d'une liste

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : formulaire différent selon le choix d'une liste

par seayoung » 14 oct. 2005, 10:52

Voilà j'ai trouvé !!!! je vous montre la solution, je dis pas que c'est la meilleur mais ca marche :
sur le fichier formulaire:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" type="text/css" media="screen, projection" href="formulaire.css" /> <script src="control.js" type="text/javascript"></script> <title>formulaire</title> </head> <body> <form action="<?php echo $action; ?>" method="post"> <select name="nom1" onchange="reloadList(document.forms[0].nom1,document.forms[0].nom2, tableau_titre_valeur_select2, true, false);"> <option value="">&nbsp;</option> <option value="valA" >TitreA</option> <option value="valB" >TitreB</option> </select> MON second select <select name="nom2"> <option></option> </select> <input type="submit" id="btprecedent" name="valid" value="valider" /> </body> </html>
et pour le fichier JS :

Code : Tout sélectionner

var secteur_activite_csp=new Array(); tableau_titre_valeur_select2[2]=new Array(5); tableau_titre_valeur_select2[2][0]="valA"; tableau_titre_valeur_select2[2][1]="01"; tableau_titre_valeur_select2[2][2]="titreA 1"; tableau_titre_valeur_select2[2][3]="02"; tableau_titre_valeur_select2[2][4]="TitreA 2"; tableau_titre_valeur_select2[3]=new Array(5); tableau_titre_valeur_select2[3][0]="valB"; tableau_titre_valeur_select2[3][1]="10"; tableau_titre_valeur_select2[3][2]="titreB 1"; tableau_titre_valeur_select2[3][3]="15"; tableau_titre_valeur_select2[3][4]="titreB 2"; function reloadList(listfrom, listto, table,init) { if (listfrom.options[listfrom.selectedIndex].value == "") { listto.getOptionValue=1; listto.options.length = 1; listto.options[0].value = ""; listto.options[0].text = ""; } else { for (i=0;i < table.length;i++) { if (table[i][0] == listfrom.options[listfrom.selectedIndex].value) { beginIndex = 0; tableCurrent = table[i]; listto.options[0].value = ""; listto.options[0].text = ""; beginIndex = 1; listto.options.length = (tableCurrent.length - 1)/2 + beginIndex; var sizeTable = tableCurrent.length; for (j=1; j < sizeTable; j = j + 2) { listto.options[(j - 1) / 2 + beginIndex].value = tableCurrent[j]; listto.options[(j - 1) / 2 + beginIndex].text = tableCurrent[j + 1]; } } } if (!init) listto.selectedIndex=0; } }
Merci a tous pour votre aide surtout heddicmi.
Cette solution marche si vous voulez des explications n'hesitez pas :wink:

par seayoung » 13 oct. 2005, 14:29

je vais vous donner les tableau en plus et normalement avec ca vous aurez tout ...
enfin voilà en gros le process:
Sur la page formulaire :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" type="text/css" media="screen, projection" href="formulaire.css" /> <script src="control.js" type="text/javascript"></script> <title>formulaire</title> </head> <body> <form action="<?php echo $action; ?>" method="post"> <select name="nom1" onchange="reloadList(document.forms[0].nom1,document.forms[0].nom2, tableau_titre_valeur_select2, true, false);"> <option value="">&nbsp;</option> <option value="valA" >TitreA</option> <option value="valB" >TitreB</option> </select> MON second select <select name="nom2"> <option value="">&nbsp;</option> <option value="val1" >titreA 1</option> <option value="val2" >titreA 2</option> </select> <input type="submit" id="btprecedent" name="valid" value="valider" /> </body> </html>
et dans le fichier control.js:

Code : Tout sélectionner

tableau_titre_valeur_select2[2]=new Array(5); tableau_titre_valeur_select2[2][0]="valA"; tableau_titre_valeur_select2[2][1]="01"; tableau_titre_valeur_select2[2][2]="titreA 1"; tableau_titre_valeur_select2[2][3]="02"; tableau_titre_valeur_select2[2][4]="TitreA 2"; tableau_titre_valeur_select2[3]=new Array(5); tableau_titre_valeur_select2[3][0]="valB"; tableau_titre_valeur_select2[3][1]="10"; tableau_titre_valeur_select2[3][2]="titreB 1"; tableau_titre_valeur_select2[3][3]="15"; tableau_titre_valeur_select2[3][4]="titreB 2"; function reloadList(listfrom, listto, table, defaultvalue, init) { if (listfrom.options[listfrom.selectedIndex].value == "") { listto.options.length = 1; listto.options[0].value = ""; listto.options[0].text = ""; } else { for (i=0;i < table.length;i++) { if (table[i][0] == listfrom.options[listfrom.selectedIndex].value) { beginIndex = 0; tableCurrent = table[i]; if (defaultvalue) { listto.options[0].value = ""; listto.options[0].text = ""; beginIndex = 1; } listto.options.length = (tableCurrent.length - 1)/2 + beginIndex; var sizeTable = tableCurrent.length; for (j=1; j < sizeTable; j = j + 2) { listto.options[(j - 1) / 2 + beginIndex].value = tableCurrent[j]; listto.options[(j - 1) / 2 + beginIndex].text = tableCurrent[j + 1]; } } } if (! init) listto.selectedIndex=0; } }
Je vous ai mis le process pour que vous pouvez voir comment ca tourne mais élas je ne peux pas mettre le code réel :? dsl mais normalement avec tout ca vous pouvez tester et voir ou je veux en venir ... enfin j espere
Merci en tout cas heddicmi pour le temps que tu passes avec moi pour résoudre ce problème.
Cependant j'épluche a fond depuis hier TJS et j'ai déja trouver pas mal de piste mais je ne vois pas encore pourquoi mon process ne veut pas marcher j ai planter quelque part mais je vois pas ou ... :cry:

par heddicmi » 13 oct. 2005, 14:06

Tu peux nous donner le code en entier histoire de tester le javascript...

par seayoung » 13 oct. 2005, 11:54

voila le truc :
j ai fait des tableaux javascript y en a un paket ... Mais bon ... ensuite j ai fait une petite fonction js genre :

Code : Tout sélectionner

function reloadList(listfrom, listto, table, defaultvalue, init) { if (listfrom.options[listfrom.selectedIndex].value == "") { listto.options.length = 1; listto.options[0].value = ""; listto.options[0].text = ""; } else { for (i=0;i < table.length;i++) { if (table[i][0] == listfrom.options[listfrom.selectedIndex].value) { beginIndex = 0; tableCurrent = table[i]; if (defaultvalue) { listto.options[0].value = ""; listto.options[0].text = ""; beginIndex = 1; } listto.options.length = (tableCurrent.length - 1)/2 + beginIndex; var sizeTable = tableCurrent.length; for (j=1; j < sizeTable; j = j + 2) { listto.options[(j - 1) / 2 + beginIndex].value = tableCurrent[j]; listto.options[(j - 1) / 2 + beginIndex].text = tableCurrent[j + 1]; } } } if (! init) listto.selectedIndex=0; } }
puis dans mon formulaire j ai mon premier select tout remplis qui fait appel a cette fonction.
Puis le second est déja remplis avec déja des valeurs type:

Code : Tout sélectionner

MON premier select <select name="nom1" onchange="reloadList(document.forms[0].nom1,document.forms[0].nom2, tableau_titre_valeur_select2, true, false);"> <option value="">&nbsp;</option> <option value="valA" >TitreA</option> <option value="valB" >TitreB</option> <option value="valC" >TitreC</option> </select> MON second select <select name="nom2"> <option value="">&nbsp;</option> <option value="val1" >titre1</option> <option value="val2" >titre2</option> <option value="val3" >titre3</option> <option value="val4" >titre4</option> <option value="val5" >titre5</option> </select>
qu'en pensez vous
Le souci c'est que ca marche po :cry:

par Xenon_54 » 13 oct. 2005, 01:44

L'article sur AJAX a été publié dans la FAQ:
http://www.phpfrance.com/forums/voir_sujet-9551.php

par err747 » 12 oct. 2005, 23:14

je peux pas vraiment t'aider mais je peux te dire que à l'époque où je cherchais des javascripts sympa à mettre dans mon site (avant d'apprendre le javascript :D) j'avais trouvé exactement ce que tu cherches sur le site de ToutJavascript...

En fouillant un peu dans leurs codes à télécharger et en examinant le script tu devrais arriver à faire ce que tu veux sans trop de complications....

par heddicmi » 12 oct. 2005, 18:41

Un tableau, ça s'assimile à une petite bd dans ton cas... Sauf qu'au lieu de faire une requête, tu recherches manuellement dans ton tableau la valeur adequat...

par seayoung » 12 oct. 2005, 18:16

Oui c'est un type d'exemple que j ai déja vu le soucil c'est qu'ici Cyrano utilise un Bdd moi pour cette appli je peux pas en utiliser une :?
Je vais continuer mes recherches merci pour les propals :wink:

par seayoung » 12 oct. 2005, 18:02

super Xenon_54 je vais voir et je vous tiens au courant
merci en tout cas pour les piste

par Xenon_54 » 12 oct. 2005, 18:00

La question a déjà été traitée dans la FAQ de ce forum.
La question et la réponse se trouve à l'adresse suivante:
http://www.phpfrance.com/forums/voir_sujet-4562.php

N'hésite pas à revenir si tu as des questions sur les explications.

par heddicmi » 12 oct. 2005, 17:37

Yep ca serai plus simple ca ... à méditer ... cependant mon formulaire est tellement spé que ca me semble difficile ;) :wink: mais merci en tout cas
Bin le plus chiant ensuite, c'est conserver es valeurs pou les remettre dans la formulaire rechargé...

par seayoung » 12 oct. 2005, 17:35

Yep ca serai plus simple ca ... à méditer ... cependant mon formulaire est tellement spé que ca me semble difficile ;) :wink: mais merci en tout cas

par heddicmi » 12 oct. 2005, 17:32

Enfin PS quand même...

Tu peux le faire autrement qu'en javascript... En PHP... Ca impliquerait qu'en sélectionnant dans la liste OS ou version, tu dises à ta page de se recharger... Et suivant la valeur choisis, tu remplis la 2ème liste avec le bon tableau...

par seayoung » 12 oct. 2005, 17:16

javais peur d'entendre ca :cry: merci en tout cas heddicmi vais faire un tour voir ca.
Si des gens ont déja fait ca (se dont j'en doute pas tous les avis sont bon a prendre :)

par heddicmi » 12 oct. 2005, 17:02

Je te dirais te passer ton tableau en un tableau Javascript, puis de regarder sur comment gérer l'ajout et la suppression d'éléments dans un SELECT... Tu as des informations sur le site de Tout Javascript...