Page 1 sur 2

formulaire différent selon le choix d'une liste

Posté : 12 oct. 2005, 16:18
par seayoung
Bonjour,
Le titre n'est certe pas expressif je vais essayer d être plus clair :
j'ai dans un formulaire deux listes déroulantes, je voudrai que mon choix de la liste1 influe sur le texte de ma liste2.

explication :
liste1 : OS version test

si sur la liste 1 je choisie OS ma liste 2 affiche WIN SUSE MANDRAKE
si sur la liste 1 je choisie version ma liste 2 affiche 3.11 2000 xp
etc ....

Je cherche des pistes je sais que ca ne peut se faire qu'en JS mais comme je suis très nul en JS je voudrai avoir des pistes.

Petit détail les paramatres de mes listes ( 1 et 2 ) sont des tableaux php
Merci, en espérant avoir été plus clair

Posté : 12 oct. 2005, 17:02
par heddicmi
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...

Posté : 12 oct. 2005, 17:16
par seayoung
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 :)

Posté : 12 oct. 2005, 17:32
par heddicmi
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...

Posté : 12 oct. 2005, 17:35
par seayoung
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

Posté : 12 oct. 2005, 17:37
par heddicmi
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é...

Posté : 12 oct. 2005, 18:00
par Xenon_54
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.

Posté : 12 oct. 2005, 18:02
par seayoung
super Xenon_54 je vais voir et je vous tiens au courant
merci en tout cas pour les piste

Posté : 12 oct. 2005, 18:16
par seayoung
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:

Posté : 12 oct. 2005, 18:41
par heddicmi
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...

Posté : 12 oct. 2005, 23:14
par err747
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....

Posté : 13 oct. 2005, 01:44
par Xenon_54
L'article sur AJAX a été publié dans la FAQ:
http://www.phpfrance.com/forums/voir_sujet-9551.php

Posté : 13 oct. 2005, 11:54
par seayoung
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:

Posté : 13 oct. 2005, 14:06
par heddicmi
Tu peux nous donner le code en entier histoire de tester le javascript...

Posté : 13 oct. 2005, 14:29
par seayoung
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: