Liste déroulante selon checkbox cochée ou pas

Résolu/Fermé
Nicolas - 22 févr. 2010 à 15:13
 Nicolas - 24 févr. 2010 à 13:46
Bonjour,

J'ai un formulaire php qui renvoi les données contenues dans une base SQL, tout fonctionne.

Dans ce formulaire j'ai 2 checkbox ("Windows" et "Linux") et selon ce qui est coché, je voudrais afficher une liste déroulante de logiciels disponible sous Windows et/ou Linux.
La liste de logiciels disponible étant contenu dans un base de donnée SQL.

Pour l'instant j'ai la liste déroulante mais aucun lien entre ma liste déroulante et mes checkbox.

Auriez vous une piste ?

Nicolas
A voir également:

6 réponses

Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
22 févr. 2010 à 15:58
Bonjour,

En piste que je te donnerais, ce serait l'utilisation de Javascript ou AJAX

Soit, en javascript, tu recupere toutes les valeurs des 2 listes, et tu affiche ou masque les listes, selon le choix de la checkbox

Soit, en AJAX, dès que la valeur de la checkbox change, tu fais une requête SQL pour récupérer la liste et modifier la page.

Est-ce que ca répond un peu a ta question ?
0
ndsaerith Messages postés 304 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 28
22 févr. 2010 à 17:19
Salut,

j'ai trouvé quelques truc mais il reste à remplir la liste mais je suis dessus ^^

<html>
<Head>
<script type="text/javascript">

var listelogs = new Array();
listelogs[0] = new Array(1er log windows","2eme log windows","3eme log windows","4eme log windows");
listelogs[1] = new Array("1er log linux","2eme log linux","3eme log linux","4eme log linux","5eme log linux");
                       
function detectcoche() {
  if(document.getElementById('choixwin').checked){    
    if(document.getElementById('choixlin').checked){
      remplir_combo('win_lin');      
    }
    else {
      remplir_combo('win');
    }
  }
  else {
    if(document.getElementById('choixlin').checked){
      if(document.getElementById('choixwin').checked){
        remplir_combo('win_lin');
      }
      else {
        remplir_combo('lin');
      }      
    }
  } 
}
function remplir_combo(mode){
  document.formulaire.select2.options.length = 0; 
  switch (mode) {
    case 'win':     
      alert ('windows');
      break;
    case 'lin':
      alert ('linux');
      break;
    case 'win_lin':
      alert ('windows et linux');
      break;
    default: 
      alert ('pas toruvé');
      break;
  }
}

</script>
</head>
<body>
<FORM id="monform">
  <INPUT type="checkbox" id="choixwin" value="win" onChange="detectcoche();" value="Windows" /> Windows
  <INPUT type="checkbox" id="choixlin" value="lin" onChange="detectcoche();" value="Linux" /> Linux
  <br><br>
  <SELECT id="laliste" disabled=true>
    <OPTION>Veuillez cocher un choix sur la ligne précédente pour accèder à cette liste</OPTION>
  </SELECT>
</FORM>
</body>
</html>




0
Merci ndsaerith pour ton script, mais dans ce cas je suis obligé de rentrer tous les logiciels dans le script, alors que je voudrais faire appelle au contenu de la base SQL.

Mopra-L, je recupere les valeurs des 2 listes via une requete sql? mais pareil, comment intégrer une requete SQL dans un javascript ?
dans le script de ndsaerith ça serait de faire un SELECT dans le listelogs[0] = new Array(). Et ça il me semble que ce n'est pas possible.

Nicolas.
0
ndsaerith Messages postés 304 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 28
23 févr. 2010 à 09:16
Re,

Dans la fonction rempllir_combo tu peux mettre ce que tu veux.
Voila un piste qui permet de "partager" les variables entre le php (qui tepermet d(interroger la base) et le js : https://forums.commentcamarche.net/forum/affich-11708410-modifier-variable-php-en-javascript
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai trouvé ça, ce n'est pas forcement optimal mais ça marche. Les checkbox sont deja checké, l'utilisateur choisi donc l'OS qu'il veut, et selon ce qu'il décoche, le menu déroulant associé est masqué. :

Le javascript
   <script language="JavaScript" type="text/javascript">
// Pour le premier menu déroulant
function ChangeStatut(formulaire) 
{      
    if (formulaire.DEFT_objlist1.checked == 1)
		{            
		document.getElementById("DISPLAY_obj1").style.display = "block";       
		}             
	   else {     
    	    document.getElementById("DISPLAY_obj1").style.display = "none";           
        	 }                                        
	}
				  
</script>

<script language="JavaScript" type="text/javascript">
// pour le deuxieme menu déroulant
function ChangeStatut2(formulaire2) 
{      
    if (formulaire2.DEFT_objlist2.checked == 1)
		{            
		document.getElementById("DISPLAY_obj2").style.display = "block";       
		}             
	   else {     
    	    document.getElementById("DISPLAY_obj2").style.display = "none";           
        	 }                                        
	}
				  
</script>



Les checkbox

Windows <input name="DEFT_objlist" type="checkbox" id="DEFT_objlist" style="margin-top: 0;" onclick="ChangeStatut(this.form);" checked="checked" />
Linux     <input name="DEFT_objlist2" type="checkbox" id="DEFT_objlist2" style="margin-top: 0;" onclick="ChangeStatut2(this.form);" checked="checked" />




L'affichage de la 1ere liste déroulante :

<div id="DISPLAY_obj1">  
 <?php
		
		 include('connexion.php');
		
		$requete = "select * from logiciels where DA_MV = 'DA'";
 		$resultat = mysql_query($requete) or die("erreur dans la requ&eacute;te $requete");
		
		while ($tableau = mysql_fetch_object($resultat))
			$nom_logiciels[] = $tableau->nom_logiciels;
	 
		echo "<select id='OBJ_int1' name='OBJ_int1'>";
	 	echo "<option> </option>";
			for ($i=0;$i<count($nom_logiciels);$i++)
				
				echo "<option value='$nom_logiciels[$i]'>$nom_logiciels[$i]</option>";
	 
		echo "</select>";
		mysql_close(); 
	?>
 </div>



Le 2eme

<div id="DISPLAY_obj2">
      <?php
		
		 include('connexion.php');
		
				$requete = "select * from DA_MV";
 		$resultat = mysql_query($requete) or die("erreur dans la requ&eacute;te $requete");
		
		while ($tableau = mysql_fetch_object($resultat))
			$nom_logiciels[] = $tableau->nom_logiciels;
	 
		echo "<select id='OBJ_int2' name='OBJ_int2'>";
	 	echo "<option> </option>";
			for ($i=0;$i<count($nom_logiciels);$i++)
				
				echo "<option value='$nom_logiciels[$i]'>$nom_logiciels[$i]</option>";
	 
		echo "</select>";
		mysql_close(); 
	?>
      </div>
	  





nous ne voyons pas d'autres explications.


Nicolas.
0
J'ai trouvé ça, ce n'est pas forcement optimal mais ça marche. Les checkbox sont deja checké, l'utilisateur choisi donc l'OS qu'il veut, et selon ce qu'il décoche, le menu déroulant associé est masqué. :

Le javascript
   <script language="JavaScript" type="text/javascript">
// Pour le premier menu déroulant
function ChangeStatut(formulaire) 
{      
    if (formulaire.DEFT_objlist1.checked == 1)
		{            
		document.getElementById("DISPLAY_obj1").style.display = "block";       
		}             
	   else {     
    	    document.getElementById("DISPLAY_obj1").style.display = "none";           
        	 }                                        
	}
				  
</script>

<script language="JavaScript" type="text/javascript">
// pour le deuxieme menu déroulant
function ChangeStatut2(formulaire2) 
{      
    if (formulaire2.DEFT_objlist2.checked == 1)
		{            
		document.getElementById("DISPLAY_obj2").style.display = "block";       
		}             
	   else {     
    	    document.getElementById("DISPLAY_obj2").style.display = "none";           
        	 }                                        
	}
				  
</script>



Les checkbox

Windows <input name="DEFT_objlist" type="checkbox" id="DEFT_objlist" style="margin-top: 0;" onclick="ChangeStatut(this.form);" checked="checked" />
Linux     <input name="DEFT_objlist2" type="checkbox" id="DEFT_objlist2" style="margin-top: 0;" onclick="ChangeStatut2(this.form);" checked="checked" />




L'affichage de la 1ere liste déroulante :

<div id="DISPLAY_obj1">  
 <?php
		
		 include('connexion.php');
		
		$requete = "select * from logiciels where DA_MV = 'DA'";
 		$resultat = mysql_query($requete) or die("erreur dans la requ&eacute;te $requete");
		
		while ($tableau = mysql_fetch_object($resultat))
			$nom_logiciels[] = $tableau->nom_logiciels;
	 
		echo "<select id='OBJ_int1' name='OBJ_int1'>";
	 	echo "<option> </option>";
			for ($i=0;$i<count($nom_logiciels);$i++)
				
				echo "<option value='$nom_logiciels[$i]'>$nom_logiciels[$i]</option>";
	 
		echo "</select>";
		mysql_close(); 
	?>
 </div>



Le 2eme

<div id="DISPLAY_obj2">
      <?php
		
		 include('connexion.php');
		
				$requete = "select * from DA_MV";
 		$resultat = mysql_query($requete) or die("erreur dans la requ&eacute;te $requete");
		
		while ($tableau = mysql_fetch_object($resultat))
			$nom_logiciels[] = $tableau->nom_logiciels;
	 
		echo "<select id='OBJ_int2' name='OBJ_int2'>";
	 	echo "<option> </option>";
			for ($i=0;$i<count($nom_logiciels);$i++)
				
				echo "<option value='$nom_logiciels[$i]'>$nom_logiciels[$i]</option>";
	 
		echo "</select>";
		mysql_close(); 
	?>
      </div>
	  





nous ne voyons pas d'autres explications.


Nicolas.
0