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

Résolu/Fermé
elsadelatoundra Messages postés 126 Date d'inscription mercredi 13 septembre 2006 Statut Membre Dernière intervention 3 juillet 2008 - 15 sept. 2006 à 10:36
 DESIGN - 4 avril 2007 à 21:08
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 !!
A voir également:

7 réponses

ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
15 sept. 2006 à 17:48
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"].";   
0
elsadelatoundra Messages postés 126 Date d'inscription mercredi 13 septembre 2006 Statut Membre Dernière intervention 3 juillet 2008 14
15 sept. 2006 à 18:23
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 ;-)
0
elsadelatoundra Messages postés 126 Date d'inscription mercredi 13 septembre 2006 Statut Membre Dernière intervention 3 juillet 2008 14
18 sept. 2006 à 09: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 ...
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
18 sept. 2006 à 19:21
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
0

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

Posez votre question
elsadelatoundra Messages postés 126 Date d'inscription mercredi 13 septembre 2006 Statut Membre Dernière intervention 3 juillet 2008 14
18 sept. 2006 à 21:07
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 !
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
19 sept. 2006 à 16:54
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
0
elsadelatoundra Messages postés 126 Date d'inscription mercredi 13 septembre 2006 Statut Membre Dernière intervention 3 juillet 2008 14
20 sept. 2006 à 08:41
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 !
0
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
0