[PHP/MySQL] listes déroulantes HELP !!

Résolu/Fermé
Signaler
Messages postés
126
Date d'inscription
mercredi 13 septembre 2006
Statut
Membre
Dernière intervention
3 juillet 2008
-
 DESIGN -
Bonjour,

En PHP, je dois créer deux listes déroulantes liées...

Dans la première liste, on sélectionne une activité et dans la deuxième, une sous-activité. Voilà en gros ce que j'ai déjà écrit :

<!-- ======================= Tableau ======================= -->

<table align='left' border='0' cellspacing='16' WIDTH="100%"> 

<!-- ======================= Première ligne du tableau ======================= -->

<TR>
<td class="form_field" valign='top' align='right'">Activité</td>
<td class="form_text">

<?php
// déclaration requete sql 

$requete1="SELECT a.* FROM activite_rssi a";	
$resultat1=mysql_query($requete1) or die ("Exécution de la requête impossible");
?> 

<?php
//Création d'un formulaire contentant une liste de sélection

echo'<form method="post" action=""><select name="ACTIVITE_ID"  class="form_text" style="width:300px" onchange="this.form.submit();">';
while($ligne=mysql_fetch_array($resultat1))
	{extract($ligne);
	if ($NOM_ACTIVITE<>"")
		echo "<option value='$ACTIVITE_ID'>$NOM_ACTIVITE</option>\n";
	}
	echo "</select>\n";
echo "</form>";
?>

</TR>

<!-- ======================= Deuxième ligne du tableau ======================= -->

<TR>
<td class="form_field" valign='top' align='right'">Sous-Activité</td>
<td class="form_text">



<?php
// déclaration requete sql 
if (isset($_POST['ACTIVITE_ID']))
{
    $requete2="SELECT sa.* FROM SOUS_ACTIVITE_RSSI sa, ACTIVITE_RSSI a WHERE sa.ACTIVITE_ID='".$_POST["ACTIVITE_ID"]."'";   
	
}
else 
{
    $requete2="SELECT sa.* FROM SOUS_ACTIVITE_RSSI sa";
} 

$resultat2=mysql_query($requete2) or die ("Exécution de la requête impossible"); 
?>

<?php
//Création d'un formulaire contentant une liste de sélection

echo'<form method="post" action=""><select name="SOUS_ACTIVITE_ID"  class="form_text" style="width:300px">';

while($ligne=mysql_fetch_array($resultat2))
	{extract($ligne);
	if ($NOM_SOUS_ACTIVITE<>"")
		echo "<option value='$SOUS_ACTIVITE_ID'>$NOM_SOUS_ACTIVITE</option>\n";
	}
	echo "</select>\n";
?>
</TR>


J'y arrive ... quand je sélectionne dans ma première liste une Activité, dans la seconde (suite au onchange="this.form.submit();" de la première liste) les bonnes valeurs des Sous-Activités disponibles s'affichent.

Mais bon, je ne suis pas venue sur ce forum pour rien, vous vous en doutiez !! En fait j'ai deux soucis qui font que je vais peut-être devenir folle:

1. suite à onchange="this.form.submit();", la valeur dans ma première liste redevient celle initiale.
Par exemple, si j'avais les listes :

Activité 1
Activité 2
Activité 3

Sous-Activité 1-1
Sous-Activité 1-2
Sous-Activité 2-1
Sous-Activité 2-2
Sous-Activité 3-1
Sous-Activité 3-2

et que je choisissais "Activité 3", dans ma liste des Sous-Activité ne s'afficheraient que Sous-Activité 3-1 et Sous-Activité 3-2, mais dans ma première liste, on serait sur Activité 1 au lieu de Activité 3.

Bref, je ne sais pas si c'est très clair, mais c'est pas très logique et surtout trop déroutant pour le futur utilisateur parce que mes listes ne se limitent bien évidemment pas à 3 activités et 6 sous-activités et leur nom sont bien plus compliqués ... !!

2. Bien que, comme je viens de vous le dire, ma deuxième liste comprenne ce que je veux d'elle, au lieu de ne m'afficher que :

Sous-Activité 3-1
Sous-Activité 3-2

suite au choix de Activité 3, elle m'affiche :

Sous-Activité 3-1
Sous-Activité 3-2
Sous-Activité 3-1
Sous-Activité 3-2
Sous-Activité 3-1
Sous-Activité 3-2

Et je ne comprends pas vraiment d'où ça vient !!

J'espère que quelqu'un d'entre vous pourra m'aider ... :'(

Je vous remercie d'avance !!

7 réponses

Messages postés
148
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
10 mars 2012
82
Bonjour,

Pour ton premier problème :

Il suffit de faire un test pour savoir si le premier formulaire a été validé (avec isset). Et si c'est le cas, on compar la ligne actuelle avec le resultat du formulaire. Si c'est le même identifiant on dit que ce sera la valeur par defaut de la liste. Normalement ca donnerait :

echo'<form method="post" action=""><select name="ACTIVITE_ID"  class="form_text" style="width:300px" onchange="this.form.submit();">';
while($ligne=mysql_fetch_array($resultat1))
	{
          extract($ligne);
	  if ($NOM_ACTIVITE<>"")
	  {
                if(isset($_POST['$ACTIVITE_ID']) && $_POST['$ACTIVITE_ID']==$ACTIVITE_ID)
                  $defaut="selected";
                else $defaut="";
		echo "<option value='$ACTIVITE_ID' $defaut>$NOM_ACTIVITE</option>\n";
	  }
	}
	echo "</select>\n";
echo "</form>";



Pour ton deuxième problème, je ne vois pas le problème si ce n'est que ta requête est pas idéale :
$requete2="SELECT sa.* FROM SOUS_ACTIVITE_RSSI sa, ACTIVITE_RSSI a WHERE sa.ACTIVITE_ID='".$_POST["ACTIVITE_ID"]."'";   


Dans ta requête tu importe ACTIVITE_RSSI alors que tu ne l'utilises pas! De plus si sa.ACTIVITE_ID est un entier (comme je le pense), il ne faut pas mettre de quote autour. La requête serait donc :

$requete2="SELECT * FROM SOUS_ACTIVITE_RSSI WHERE ACTIVITE_ID=".$_POST["ACTIVITE_ID"].";   
Messages postés
126
Date d'inscription
mercredi 13 septembre 2006
Statut
Membre
Dernière intervention
3 juillet 2008
14
Merci ceddec de t'être pencher sur mes petits sushis !

Je ne pourrais pas tester les modifs de mon code avant lundi, mais je pense les comprendre et donc j'imagine que lundi, je serai heureuse de voir que c'est possible !!


Merci, je reposterai si ça continue de foirer ;-)
Messages postés
126
Date d'inscription
mercredi 13 septembre 2006
Statut
Membre
Dernière intervention
3 juillet 2008
14
Lundi matin ... depuis vendredi soir j'avais envie de tester ta solution ceddec ... La solution au deuxième problème marche nikel, mais celle au premier non !

Je ne sais vraiment toujours pas quoi faire ... J'ai beau y réfléchir, je ne comprends pas pourquoi la solution que tu m'a proposée n'est pas la bonne :'(

Si quelqu'un sait, je suis preneuse !!

Merci d'avance ...
Messages postés
148
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
10 mars 2012
82
Bonjour,

J'ai testé parce que je trouvait bizar que ça ne marche pas. Et en fait c'est une erreur toute bete :
Voici l'ancien test :
if(isset($_POST['$ACTIVITE_ID']) && $_POST['$ACTIVITE_ID']==$ACTIVITE_ID)

l'erreur est que dans $_POST[..], il ne faut pas remettre le $

Le test devient donc
if(isset($_POST['ACTIVITE_ID']) && $_POST['ACTIVITE_ID']==$ACTIVITE_ID)


et voila ca marche

C'est une erreur de copier coller
Messages postés
126
Date d'inscription
mercredi 13 septembre 2006
Statut
Membre
Dernière intervention
3 juillet 2008
14
Cool !!

J'ai cherché ce matin et ça devait trop être la matin !! Je teste ça dès demain matin après 2 ou 3 cocas ...

Merci beaucoup ceddec !
Messages postés
148
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
10 mars 2012
82
Je n'ai pas remarqué tout de suite mais le fait de faire un onchange=submit peut poser problème. En effet, si l'utilisateur veut choisir la première valeur (domaine1), il ne la changera pas puisqu'elle y est deja. Et donc le onChange ne se fera pas et il sera bloqué.
Il vaut mieux mettre un premier choix blanc pour l'obliger à changer ta liste. Le code devient :

echo'<form method="post" action=""><select name="ACTIVITE_ID"  class="form_text" style="width:300px" onchange="this.form.submit();"><option></option>';


C'est une petite remarque qui m'est venue comme ça à l'esprit dans la journée
Messages postés
126
Date d'inscription
mercredi 13 septembre 2006
Statut
Membre
Dernière intervention
3 juillet 2008
14
Merci ceddec,

Tout marche enfin super bien !!

En plus l'idée de laisser le champ blanc était très bonne ... alors je suis contente !

Encore merci !
js8 débutant en php pourrais tu me passer ton bout de code? je tente justement de faire la même chose mais avec 4 listes déroulantes liées...

louey@skymail.com

Merci