Page 1 sur 1

form => afficher ou masquer listes en fonction d'une autr

Posté : 18 juil. 2006, 19:03
par jay64
Bonjour à tous,

J'ai dans un formulaire une première liste déroulante avec des value allant de 0 à 9 (10 choix possibles).
J'ai ensuite 9 autres listes diponibles affichant tout autre type d'information.
Ce que je voudrais, c'est qu'en fonction du chiffre que l'on choisit via la première liste, les autres listes soit masquées ou affichées => exemple : je choisis le chiffre 2 dans la première liste => alors seules deux listes complémentaires sont proposées à l'internaute.

Cela est-il possible ? Si oui, comment ?

Merci d'avance

Jay

Posté : 18 juil. 2006, 19:17
par Cyrano
C'est possible en allant faire un tour dans le forum FAQ : regarde la liste des post-it, il y en a un en particulier qui devrait te permettre de résoudre ton problème.

Posté : 18 juil. 2006, 21:26
par jay64
ok, merci Cyrano pour ta réponse.

Cependant, je t'avoue qu'étant débutant, j'y suis un peu perdu.

En fait, voici mon code :
<?php
<form id="form1" name="form1" method="get" action="test.php">
  <label>Nb de listes à afficher :
  <select name="NbListe" id="NbListe">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
  </select>
  </label>
  <p>

	
	//affichage de la liste 1 uniquement si le résultat renvoyé par "NbListe" est > à 1
	
	if (NbListe > 1);
	
	{
	<label>Liste 1 :
    <select name="Liste1">
      <option value="A">A</option>
      <option value="B">B</option>
      <option value="C">C</option>
    </select>
    </label>
	}
		
  </p>
  
  <p>

	
	//affichage de la liste 2 uniquement si le résultat renvoyé par "NbListe" est > à 2
    
	if (NbListe > 2);
	
	{
	<label>Liste 2 :
    <select name="Liste2" id="Liste2">
      <option value="A">A</option>
      <option value="B">B</option>
      <option value="C">C</option>
    </select>
    </label>
	}

   </p>
  
</form>
?>
Comme tu peux le voir, je souhaite afficher la liste 1 et la liste 2 uniquement en fonction du résultat retourné par la première liste.
Bien entendu, cela ne fonctionne pas en l'état. Peux-tu m'aider un peu plus ?

Merci

Jay

Posté : 18 juil. 2006, 22:03
par Cyrano
Ça ne s'explique pas en quelques lignes et j'ai essayé de faire un tuto aussi clair que possible. Il faut prendre le temps pour l'assimiler.

Ton formulaire ne comporte aucun gestionnaire d'évènement, donc à première vue tu n'adoptes pas la technique JavaScript : mais rien n'indique non plus que tu aies envisagé la solution 100% PHP (plus lente)

Retourne voir le tuto, essaye de comprendre au moins les grandes lignes du fonctionnement de chacune des méthodes pour faire ton choix selon ce qui te semble le moins inaccessible et adaptes. En outre, je te signale dans la FAQ une autre version utilisant Ajax qui n'est pas inintéressante.

Mais ça reste des exemples pour illustrer un système, à chacun d'adapter selon ses propres besoins.

Posté : 19 juil. 2006, 16:38
par jay64
ok. Bon, je suis arrivé à peu prés à tout comprendre sauf ça :
<option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]." (". $code_dept[$d] .")"); ?></option>
Quelqu'un pourrait-il m'aider à décoder?

Merci encore

Posté : 19 juil. 2006, 19:06
par Cyrano
C'est une balise option dont le contenu dynamique est réparti en deux éléments :
La valeur à afficher;
La sélection d l'option.

Dans la boucle de génération, on récupéere la valeur du département ainsi que le numéro correspondant : on va s'en servir pour alimenter l'attribut value de la balise option et le texte affiché dans l'option du formulaire.

Ensuite, il est possible que ce soit le premier affichage, mais également que ce soit lors du rechargement pour afficher la seconde liste. La partie :
<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>
va récupérer si elle existe la valeur de $dept_selectionne : si elle existe et qu'elle correspond au département qui sera affiché dans l'option en cours, alors on ajoutera dans la balise l'attribut selected="selected" tout simplement, sinon, rien ne sera ajouté (null). Cette formulation s'appelle un opérateur ternaire. Fais un tour au besoin dans la FAQ, il y a un tuto là-dessus aussi.

Posté : 20 juil. 2006, 14:04
par jay64
ok, merci beaucoup !