Cascade de Liste Déroulante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Cascade de Liste Déroulante

par Photographiquement Vôtre » 19 févr. 2008, 16:34

J'ai fait quelques corrections.

Merci pour ton aide

Voici le code pour qui cela peut intéresser :
<?php 

include ("../Connexion/connexion.php");	  

$cat = isset($_POST['categorie'])?$_POST['categorie']:null; 


if(isset($_POST['soumettre']) && isset($_POST['souscategorie']) && $_POST['souscategorie'] != "") 
	{ 
    $categorie_selectionnee = $_POST['categorie']; 
    $souscategorie_selectionnee = $_POST['souscategorie']; 
?> 

<p>Vous avez sélectionné la catégorie <?php echo($categorie_selectionnee); ?> et la sous categorie <?php echo($souscategorie_selectionnee); ?></p> 

<?php 
	} 

	$sql_categorie= "SELECT * FROM  tblcategorie_prospect ORDER BY categorie_prospectId"; 
	$query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL1 !'.$query_categorie.'<br>'.mysql_error()); 
  
	$code_categorie = array(); 
    $libelle_categorie = array(); 
    /* On active un compteur  */ 
    $nb_categorie = 0; 
     
        while($result_categorie = mysql_fetch_assoc($query_categorie)) 
        { 
            array_push($code_categorie, $result_categorie['categorie_prospectId']); 
            array_push($libelle_categorie , $result_categorie['categorie_prospectLibelle']); 

            /* On incrémente de compteur */ 
            $nb_categorie++; 
        } 
	
	
?> 
        <form   method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" name="chgdept" id="chgdept"> 
            <table width="470" align="center" border="0" cellspacing="0"> 
                <tr> 
                    <td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td> 
                    <td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td> 
                </tr> 
                <tr> 
                       <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td> 
                       <td width="311" align="left"><textarea name="message" id="message" rows="10"   cols="55"></textarea></td> 
                 </tr> 
                 <tr> 
                    
                    
                       <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td> 
                       <td width="311" align="left"><select name="categorie" id="categorie" width="40"  onchange="document.forms['chgdept'].submit();" width="40"> 
 > 

                       <OPTION value="-1" >Sélectionnez une catégorie</OPTION> 

<?php 
				for($i = 0; $i < $nb_categorie; $i++) 
    				{ 
?> 
  				<option value="<?php echo($code_categorie[$i]); ?>"<?php echo((isset($cat) && $cat == $code_categorie[$i])?" selected=\"selected\"":null); ?>><?php echo($libelle_categorie[$i]); ?></option> 
<?php 
    				}           

                
?>                
                </select> 
               </td> 
              </tr> 
                        
<?php  
				mysql_free_result($query_categorie);  
				                           
             if(isset($cat) && $cat != -1) 
             
    			{ 
        		/* Cération de la requête pour avoir les sous catégories */ 
       		$sql_souscategorie = "SELECT * FROM  tblsouscategorie_prospect WHERE categorie_prospectId=". $cat ."" ;
       		
        	$query_souscategorie = mysql_query($sql_souscategorie)or exit ('Erreur SQL2 !'.$query_souscategorie.'<br>'.mysql_error()); 
             
            /* Compteur pour les sous catégories */ 
            $nb_souscategorie = 0; 
            /* On crée deux tableaux pour les Id de sous catégories et leurs libellés */ 
            $code_souscategorie = array(); 
    		$libelle_souscategorie = array(); 
            /* On va mettre les Id et Libellés dans les deux tableaux */ 
            while($result_souscategorie = mysql_fetch_assoc($query_souscategorie)) 
            { 
                array_push($code_souscategorie, $result_souscategorie['souscategorie_prospectId']); 
                array_push($libelle_souscategorie,$result_souscategorie['souscategorie_prospectLibelle']); 
                $nb_souscategorie++; 
            	} 
            /* Maintenant on peut construire la liste déroulante */ 
            ?> 
            <tr>
            <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sous Catégorie : </b> </font></p></td> 
            
			<td width="311" align="left"><select name="souscategorie" id="souscategorie"> 
<?php   
            for($d = 0; $d<$nb_souscategorie; $d++) 
            	{ 
?> 
  			<option value="<?php echo($code_souscategorie[$d]); ?>"<?php echo((isset($souscategorie_selectionnee ) && $$souscategorie_selectionnee  == $code_souscategorie[$d])?" selected=\"selected\"":null); ?>><?php echo($libelle_souscategorie[$d]); ?></option> 
<?php 
            } 
?> 
</select> 
<?php 
         
       
        mysql_free_result($query_souscategorie); 
    } 
 ?>              </td> 
                                       
                   </tr> 
  
                 
                   <tr>     
                       <td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td> 
                </tr> 
            </table> 
        </form> 
        

     

</body> 
</html>  

par d0m » 19 févr. 2008, 15:39

Dans ta liste des catégories tu as ce code :

Code : Tout sélectionner

onchange="document.forms['chgdept'].submit();"
et voilà ton formulaire :

Ce qui veut dire en français soumettre le formulaire nommé chgdept dans le document courant.

Or dans ton formulaire tu ne précise pas de nom, juste l'id :
<form   method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" id="chgdept">
Il faut donc préciser l'attribut name.

Sinon tu peux préciser que c'est le formulaire dans lequel la liste se trouve :

Code : Tout sélectionner

onchange="this.form.submit();"
Ça a l'avantage de garder le code valide si tu changes le nom de ton formulaire.

par Photographiquement Vôtre » 19 févr. 2008, 15:05

Je souhaite quand j'ai choisi un élément dans ma première listbox "categorie" que ma deuxième listbox "sous categorie" soit remplie.

Pour l'instant cela marche quand je clique sur le bouton de submit

par d0m » 19 févr. 2008, 09:43

reprenons.

Qu'appelles tu mouvementer ta sous catégorie?

Que veux tu que ça fasse exactement et qu'est ce que ça fait pour l'instant?

par Photographiquement Vôtre » 19 févr. 2008, 02:03

Oui j'avais compris mais je n'arrive toujours pas à mouvementer ma sous catégorie.

J'ai un peu modifié mon code :
<?php 

include ("../Connexion/connexion.php");	  

$cat = isset($_POST['categorie']); 

echo "$cat";

if(isset($_POST['soumettre']) && isset($_POST['souscategorie']) && $_POST['souscategorie'] != "") 
	{ 
    $categorie_selectionnee = $_POST['categorie']; 
    $souscategorie_selectionnee = $_POST['souscategorie']; 
?> 

<p>Vous avez sélectionné la catégorie <?php echo($categorie_selectionnee); ?> et la sous categorie <?php echo($souscategorie_selectionnee); ?></p> 

<?php 
	} 

	$sql_categorie= "SELECT * FROM  tblcategorie_prospect ORDER BY categorie_prospectId"; 
	$query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL !'.$query_categorie.'<br>'.mysql_error()); 
  
	$code_categorie = array(); 
    $libelle_categorie = array(); 
    /* On active un compteur  */ 
    $nb_categorie = 0; 
     
        while($result_categorie = mysql_fetch_assoc($query_categorie)) 
        { 
            array_push($code_categorie, $result_categorie['categorie_prospectId']); 
            array_push($libelle_categorie , $result_categorie['categorie_prospectLibelle']); 

            /* On incrémente de compteur */ 
            $nb_categorie++; 
        } 
	
	
?> 
        <form   method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" id="chgdept"> 
            <table width="470" align="center" border="0" cellspacing="0"> 
                <tr> 
                    <td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td> 
                    <td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td> 
                </tr> 
                <tr> 
                       <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td> 
                       <td width="311" align="left"><textarea name="message" id="message" rows="10"   cols="55"></textarea></td> 
                   </tr> 
                   <tr> 
                    
                    
                       <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td> 
                       <td width="311" align="left"><select name="categorie" id="categorie" width="40"  onchange="document.forms['chgdept'].submit();" width="40"> 
 > 

                       <OPTION value="-1" >Sélectionnez une catégorie</OPTION> 

<?php 
				for($i = 0; $i < $nb_categorie; $i++) 
    { 
?> 
  				<option value="<?php echo($code_categorie[$i]); ?>"<?php echo((isset($cat) && $cat == $code_categorie[$i])?" selected=\"selected\"":null); ?>><?php echo($libelle_categorie[$i]); ?></option> 
<?php 
    }           

                
?>                
                </select> 
               </td> 
              </tr> 
                        
<?php  
				mysql_free_result($query_categorie);                             
             if(isset($cat) && $cat != -1) 
    			{ 
        		/* Cération de la requête pour avoir les sous catégories */ 
       		 $sql_souscategorie = "SELECT * FROM  tblsouscategorie_prospect WHERE categorie_prospectId =" .$cat. " ORDER BY souscategorie_prospectId"; 
        	$query_souscategorie = mysql_query($sql_souscategorie)or exit ('Erreur SQL !'.$query_souscategorie.'<br>'.mysql_error()); ;  
             
            /* Compteur pour les sous catégories */ 
            $nb_souscategorie = 0; 
            /* On crée deux tableaux pour les Id de sous catégories et leurs libellés */ 
            $code_souscategorie = array(); 
    		$libelle_souscategorie = array(); 
            /* On va mettre les Id et Libellés dans les deux tableaux */ 
            while($result_souscategorie = mysql_fetch_assoc($query_souscategorie)) 
            { 
                array_push($code_souscategorie, $result_souscategorie['souscategorie_prospectId']); 
                array_push($libelle_souscategorie,$result_souscategorie['souscategorie_prospectLibelle']); 
                $nb_souscategorie++; 
            	} 
            /* Maintenant on peut construire la liste déroulante */ 
            ?> 
			<select name="souscategorie" id="souscategorie"> 
<?php   
            for($d = 0; $d<$nb_souscategorie; $d++) 
            	{ 
?> 
  			<option value="<?php echo($code_souscategorie[$d]); ?>"<?php echo((isset($souscategorie_selectionnee ) && $$souscategorie_selectionnee  == $code_souscategorie[$d])?" selected=\"selected\"":null); ?>><?php echo($libelle_souscategorie[$d]); ?></option> 
<?php 
            } 
?> 
</select> 
<?php 
         
       
        mysql_free_result($query_souscategorie); 
    } 
 ?>              </td> 
                                       
                   </tr> 
  
                 
                   <tr>     
                       <td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td> 
                </tr> 
            </table> 
        </form> 
        

     

</body> 
</html>  

par d0m » 18 févr. 2008, 22:51

Tu veux que ta page se recharge donc automatiquement en changeant de catégorie dans la liste.

En PHP pur ce n'est pas possible, il faut soumettre le formulaire par un bouto submit.

Par contre tu peux utiliser du javascript avec l'événement onChange.

Par exemple :
<form  id="form_email" method="post" action="<?php echo $_SERVER['PHP_SELF']">
  <select name="categorie" onChange="this.form.submit();" width="40">
En changeant l'action du formulaire pour qu'il redirige vers la page elle même.

Tu fais simplement un test au début de ta page, si le formulaire a été soumis par le bouton, tu rediriges les informations via un header vers ta page news_send_html.php.
Sinon c'est que tu as simplement changé de catégorie.

Sinon de l'ajax...

par Photographiquement Vôtre » 18 févr. 2008, 20:32

Ma liste categorie est correctement remplie.

Mais quand je clique dessus, rien ne se passe = aucun résultat à l'instruction
$cat = isset($_POST['categorie'])?$_POST['categorie']:null; 

echo "$cat";
Mais quand je soumets le formulaire

echo "$cat"; marche.

Un autre fait inquiétant, quand je soumets le formulaire mes boutons "submit" et "reset" disparaissent ?

par d0m » 18 févr. 2008, 20:23

Essaie de voir à quel niveau se pose le problème :

transmission de donnée : $_POST['catégorie'] contient elle la bonne valeur?

préséléction dans la liste : La première liste a-t-elle la bonne catégorie préséléctionnée après rechargement

requête SQL : la requête SQL de sous catégorie est elle correcte? (affichage de la chaine requête)

éxécution requête : si oui, la requête renvoie elle des résultats? (test directement dans phpmyadmin ou similaire)

construction de la liste : les résultats de la requête sont ils bien insérés dans la liste?

par Photographiquement Vôtre » 18 févr. 2008, 18:58

OK j'ai essayé de compléter sans meilleur résultat
<?php 

include ("../Connexion/connexion.php");	  

$cat = isset($_POST['categorie'])?$_POST['categorie']:null; 

//echo "$cat";

if(isset($_POST['soumettre']) && isset($_POST['souscategorie']) && $_POST['souscategorie'] != "") 
	{ 
    $categorie_selectionnee = $_POST['categorie']; 
    $souscategorie_selectionnee = $_POST['souscategorie']; 
?> 

<p>Vous avez sélectionné la catégorie <?php echo($categorie_selectionnee); ?> et la sous categorie <?php echo($souscategorie_selectionnee); ?></p> 

<?php 
	} 

?> 
        <form  id="form_email" method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" id="chgdept"> 
            <table width="470" align="center" border="0" cellspacing="0"> 
                <tr> 
                    <td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td> 
                    <td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td> 
                </tr> 
                <tr> 
                       <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td> 
                       <td width="311" align="left"><textarea name="message" id="message" rows="10"   cols="55"></textarea></td> 
                   </tr> 
                   <tr> 
                    
                    
                       <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td> 
                       <td width="311" align="left"><select name="categorie" id="categorie" width="40" onchange="document.forms['chgdept'].submit();"> 
                       <OPTION value="-1" selected>Sélectionnez une catégorie</OPTION> 

<?php 
            $sql_categorie = "SELECT * FROM tblcategorie_prospect"; 
            $query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL !'.$query_categorie.'<br>'.mysql_error()); 
             
                while ($result_categorie=mysql_fetch_array($query_categorie)) 
                    {  
                      extract($result_categorie); 
?>     
<!-- $cat permet de faire le lien en donnant l'Id pour permettre la recherche suivante -->             
                    <option value="<?php echo($categorie_prospectId); ?>"<?php echo((isset($cat) && $cat == $categorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($categorie_prospectLibelle); ?></option>  
 <?php     
                    }  
                    mysql_free_result($query_categorie);                   
?>                
                </select> 
               </td> 
                                       
                   </tr> 
                    
                   <tr> 
                       <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sous Catégorie : </b> </font></p></td> 
                       <td width="311" align="left"><select name="souscategorie" id="souscategorie" width="40"> 
                       Sélectionnez une sous catégorie</OPTION> 
                    
<?php  
     
   

    if(isset($cat) && $cat != -1)  
        {  
       echo "$cat";
        $sql_souscategorie = "SELECT * FROM tblsouscategorie_prospect WHERE categorie_prospectId = ". $cat . " ORDER BY tblsouscategorie_prospect"; 
       
            $query_souscategorie = mysql_query($sql_souscategorie) or exit ('Erreur SQL !'.$query_souscategorie.'<br>'.mysql_error()); 
             
                while ($result_souscategorie=mysql_fetch_array($query_souscategorie)) 
                    {  
                      extract($result_souscategorie); 
?>     
<!-- $cat permet de faire le lien en donnant l'Id pour permettre la recherche suivante -->             
                    <option value="<?php echo($souscategorie_prospectId); ?>"<?php echo((isset($souscategorie_selectionnee) && $souscategorie_selectionnee == $souscategorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($souscategorie_prospectLibelle); ?></option>  
 		 </select> 
                    
<?php     
                    }  
   		           
                   mysql_free_result($query_souscategorie); 
                    }                   
?>                
               
               </td> 
                                       
                   </tr> 
  
                 
                   <tr>     
                       <td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td> 
                </tr> 
            </table> 
        </form> 
        

     

</body> 
</html>  

par d0m » 18 févr. 2008, 17:41

$cat est la catégorie sélectionnée dans la liste déroulante.

Je pense que tu as une liste de catégories, tu sélectionne une catégorie et la page se recharge.
Il faut donc au rechargement de ta page initialiser $cat avec la valeur sélectionnée précédemment dans ta liste.
C'est à dire dans $_POST['categorie']

par Photographiquement Vôtre » 18 févr. 2008, 16:01

Merci

J'ai des données dans mon select "catégorie" mais je ne suis pas sur de la syntaxe pour définir $cat
<option value="<?php echo($categorie_prospectId); ?>"<?php echo((isset($cat) && $cat == $categorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($categorie_prospectLibelle); ?></option> 

par d0m » 18 févr. 2008, 15:20

es tu sûr que $cat contient bien une bonne valeur et que la requête renvoie bien des résultats?

Cascade de Liste Déroulante

par Photographiquement Vôtre » 18 févr. 2008, 14:47

Bonjour,

J'ai une première liste déroulante qui s'alimente bien mais pas la seconde qui y est liée.

Je ne vois pas où est mon erreur.

Merci de votre aide


<html>

<head>
<title>Envoyer une newsletter</title>
</head>

<body><center>

<?php

include("../Connexion/connexion.php");

?>

<table border="0" cellspacing="0" cellpadding="3">
	<tr height="100">
		<td>
		<br>
		</td>
	</tr>
	<tr>
	<td><center><font face="verdana" size="2" color="#808080"><b>Envoyer votre newsletter</b></font></center></td>
	</tr>
	<br>
	<tr>
		<td>
		<form  id="form_email" method="post" action="news_send_html.php">
			<table width="470" align="center" border="0" cellspacing="0">
				<tr>
					<td width="130" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sujet : </b> </font></p></td>
					<td width="311" align="left"><p><input type="text" name="sujet" size="55"></p> </td>
				</tr>
				<tr>
       				<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Votre Message : </b> </font></p></td>
       				<td width="311" align="left"><textarea name="message" id="message" rows="10"   cols="55"></textarea></td>
       			</tr>
       			<tr>
       			
       			
       			    <td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Catégorie : </b> </font></p></td>
       			    <td width="311" align="left"><select name="categorie" width="40">
       			    <OPTION value="-1" selected>Sélectionnez une catégorie</OPTION>

<?php
			$sql_categorie = "SELECT * FROM tblcategorie_prospect";
			$query_categorie = mysql_query($sql_categorie) or exit ('Erreur SQL !'.$query_categorie.'<br>'.mysql_error());
			
				while ($result_categorie=mysql_fetch_array($query_categorie))
					{ 
  					extract($result_categorie);
?>	
<!-- $idr permet de faire le lien en donnant l'Id pour permettre la recherche suivante -->			
					<option value="<?php echo($categorie_prospectId); ?>"<?php echo((isset($cat) && $cat == $categorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($categorie_prospectLibelle); ?></option> 
 <?php	
								 	} 
					mysql_free_result($query_categorie); 			 	
?>       		
        		</select>
       		</td>
       			       			
       			</tr>
       			
       			<tr>
       				<td width="170" align="right"><p> <font face="verdana" size="2"color="#808080"> <b>Sous Catégorie : </b> </font></p></td>
       			    <td width="311" align="left"><select name="souscategorie" width="40">
       			    <OPTION value="-1" selected>Sélectionnez une sous catégorie</OPTION>
       			
<?php 
    
  

    if(isset($cat) && $cat != -1) 
    	{ 
	    echo "OK";	
        
      
        $sql_souscategorie = "SELECT * FROM tblsouscategorie_prospect WHERE categorie_prospectId = ". $cat . " ORDER BY tblsouscategorie_prospect";
         
        $query_souscategorie = mysql_query($sql_souscategorie) or exit ('Erreur SQL !'.$query_souscategorie.'<br>'.mysql_error());
                    
        while($result_soucategorie = mysql_fetch_array($query_souscategorie)) 
            { 
             extract($result_souscategorie);   
            
?> 
	

  				<option value="<?php echo($souscategorie_prospectId); ?>"<?php echo((isset($souscat) && $souscat == $souscategorie_prospectId)?" selected=\"selected\"":null); ?>><?php echo($souscategorie_prospectLibelle); ?></option> 
<?php 
            } 
    	}    
?> 
</select>
 
 
    			
       			<tr>	
       				<td colspan="2"><p><center><input type="submit" name = "soumettre" id="soumettre" value="Envoyer la newsletter"><input type="reset" value="Réinitialiser"></p></td>
				</tr>
			</table>
		</form>
		</td>
	</tr>
</table>

	

</body>
</html>