afficher menu déroulants selon une case cochée...niah !

Eléphanteau du PHP | 35 Messages

16 juin 2008, 15:41

Bonjour à tous

Voilà j'aimerais faire une chose, que j'explique tout de suite :
je voudrai que lorsqu'on coche (ou bouton radio) la case A, le menu déroulant A' s'affiche avec un choix.
Lorsqu'on coche la case B, le menu B' s'affiche. Soit l'un soit l'autre.

Actuellement dans mon code, il n'y a pas de choix, il y a juste le menu déroulant A' qui s'affiche mais j'aimerais introduire des boutons et le code qui va avec qui dit que si je coche A ou B tel ou tel menu déroulant s'affiche.

Exemple avec ce code :

Code : Tout sélectionner

<tr><td><div align="right"><font size=5>Nom de l'émission:</font></div></td><td><select name='nomE'> <?php $connexion=mysql_Pconnect("localhost","duplex","duplex"); if (!mysql_select_db("duplex",$connexion)) { exit;} $sql=mysql_query("SELECT * from emission ORDER BY nom_emission"); while ($ligne=mysql_fetch_array($sql)) { $r = $ligne["nom_emission"]; echo "<option value=\"$r\" >"; echo $r; echo'</option>'; } ?> </select></td>
J'aimerais que suivant un attribut de Emission (admettons 0 ou 1 coché) on recherche toutes les émsissions 0 ou 1 et on les affiche dans le menu déroulant.

Voilà :)

Merci d'avance les loulous (trop familier)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

17 juin 2008, 00:45

Bonjour,

Je reformule ce que j'ai compris en lisant la phrase de la fin:
Tu veux mettre 2 cases à cocher alternatives. Admettons qu'elles représentent un "typeEmission" 0 ou 1.
En suite, tu veux afficher dans une liste déroulante, la liste des émissions qui correspondent au "typeEmission" coché dans une des cases.

Voici, un raisonnement pas à pas :
1. Pour que les cases à cocher soient alernatives c'est à dire que l'activation de l'une d'elles désactive automatiquement des autres puisqu'elles portent différentes valeurs pour la même variable, il faut absolument utiliser des "radio button" en les nommant avec le même nom.
Illustration:

Code : Tout sélectionner

<form name="form1" ....> ... ... <input type="radio" name="typeEmission" value="0" /> 0 <input type="radio" name="typeEmission" value="1" /> 1 .... .... </form>
2. Pour forcer l'envoi du formulaire au clic sur une case "radio" c'est à dire en choisissant un typeEmission, il faut ajouter un événement javascript "onclick" qui déclenche le submit du formulaire.
Illustration: (changement du code précédant)

Code : Tout sélectionner

<input type="radio" name="typeEmission" value="0" onclick="form1.submit()" /> 0 <input type="radio" name="typeEmission" value="1" onclick="form1.submit()" /> 1
3. Et finalement, pour que la liste déroulante soit bien remplie par les émissions correspondant au typeEmission envoyé par le formulaire à l'étape 2, il faut modifier la requête SQL "SELECT" en ajoutant une clause WHERE qui filtre les émissions par typeEmission = le typeEmission envoyé par le formulaire selon la méthode choisie GET ou POST.

Bonne lecture.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 35 Messages

17 juin 2008, 09:44

Bonjour et merci pour cette réponse qui m'apparait claire

Cependant, et comme je suis débutant, j'ai une petite question à poser : en fait, je suis déjà dans un formulaire, dans la liste des émissions qui va s'afficher en fonction du type va etre choisie une émission et plusieurs champs seront remplis et hop via un formulaire on envoit les informations, et je me demande comment inclure le formulaire dans le formulaire

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

17 juin 2008, 11:36

C'est comme tu veux. Tu peux séparer les deux formulaires ou bien les joindre en un seul, et cela même s'ils existent dans la même page et même s'ils envoient vers le même programme PHP de traitement. L'important est de marquer l'action effectuée lors du submit de l'un ou de l'autre pour pouvoir la traiter dans PHP.

Exemple:

Sans séparer les 2 formulaires

Page1.php : contient 1 seul formulaire envoyant vers la même page et 2 boutons "submit" qui différencient les actions d'envoi:

1° partie du Formulaire pour le choix d'un type d'émission:

Code : Tout sélectionner

<form name="form1" method="get" action="Page1.php"> <input id="typeEmission" name="typeEmission" value="0" />0 <input id="typeEmission" name="typeEmission" value="1" />1 <input type="submit" name="changerType" value="Chercher émissions" /><br />
2° partie du Formulaire contenant la liste des émissions et les autres champs:

Code : Tout sélectionner

<select .....> ....... <input type="submit" name="valider" value="Valider" /> </form>
On voit bien que le formulaire contient 2 boutons "submit" nommés : "changerType" et "valider" et chacun sera activé dans un contexte précis. On peut alors programmer le traitement à faire selon le bouton "submit" déclenché.

Et voici, le programme PHP à insérer au début de la page "Page1.php" :
<?php
   //On traite soit la 1° partie ou la seconde du formulaire en se basant sur le nom du bouton 
  //qui a provoqué l'envoi : "changerType" ou "valider"
  
  //Traiter la 1° partie du formulaire : choix d'un type d'émission
  if (isset($_GET["changerType"])){
       //Changement de type : Exécuter la requête SQL à la recherche des émission du type choisi
       .....
  }
  
  //Traiter la 2° partie du formulaire : validation des données saisies.
  if (isset($_GET["valider"])){
       //traitement des données reçues de la  2° partie du formulaire
       .....
  }

?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 35 Messages

17 juin 2008, 12:12

Merci beaucoup pour ces explications très claires, et efficaces puisque cela fonctionne.

Encore merci.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

17 juin 2008, 12:49

Tu mets un petit [RESOLU] alors et bonne continuation.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène