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

Eléphant du PHP | 331 Messages

18 juil. 2006, 19:03

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
Modifié en dernier par jay64 le 18 juil. 2006, 19:18, modifié 1 fois.

Mammouth du PHP | 19672 Messages

18 juil. 2006, 19:17

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

18 juil. 2006, 21:26

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

Mammouth du PHP | 19672 Messages

18 juil. 2006, 22:03

Ç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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

19 juil. 2006, 16:38

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

Mammouth du PHP | 19672 Messages

19 juil. 2006, 19:06

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

20 juil. 2006, 14:04

ok, merci beaucoup !