Se connecter / S'enregistrer
Votre question

PHP - 2 menus déroulant

Tags :
  • Matériel
  • Programmation
Dernière réponse : dans Programmation
9 Juin 2011 11:21:03

Bonjour,

je viens vers vous, car je souhaite afficher des informations d'une base de données pour cela j'utilise un menu déroulant qui me permet de choisir la marque et d'afficher tous les matériels de cette marque.
Je souhaiterais maintenant ajouter un deuxième critère de recherche (toujours à l'aide d'un menu déroulant) qui serait le type et on afficherait donc le matériel d'un certain type. Je voudrais pouvoir combiner les deux et donc afficher le matériel d'une certaine marque et d'un certain type mais ça ne marche.
Ci-dessous mon code :

  1. //***********Choix de la marque**************//
  2. echo '<form method="post" action="traitementmarque2.php">';
  3. echo '<p align="center"><select onchange=submit() name="libelle" id="libelle">';
  4. $resu=mysql_query("SELECT libelle FROM ouapi_ha_marque" );
  5. echo '<option value="">---Choisir une marque---</option>';
  6. echo '<option value="Toutes les marques">Toutes les marques</option>';
  7. while ($liste = mysql_fetch_array($resu))
  8. {
  9. echo '<option value="', $liste['libelle'], '">', $liste['libelle'], '</option>';
  10. }
  11. echo '</select></p>';
  12. echo '</form>';
  13. $libelle = ($_POST['libelle']);
  14.  
  15. //***********Choix du type*************//
  16. echo '<form method="post" action="traitementmarque2.php">';
  17. echo '<p align="center"><select onchange=submit() name="libelle2" id="libelle2">';
  18. $resu2=mysql_query("SELECT libelle FROM ouapi_ha_type");
  19. echo '<option value="">---Choisir un type---</option>';
  20. echo '<option value="Tous les types">Tous les types</option>';
  21. while ($liste2 = mysql_fetch_array($resu2))
  22. {
  23. echo '<option value="', $liste2['libelle'], '">', $liste2['libelle'], '</option>';
  24. }
  25. echo '</select></p>';
  26. echo '<form>';
  27. $libelle2 = ($_POST['libelle2']);


Je ne sais pas si je dois créer 2 formulaires, en tout cas, je pense que le problème vient du fait que j'utilise "onchange=submit()" et donc que le champ marque se réinitialise qd je choisit le type et vice-versa.

Je voudrais donc savoir si je dois bien créer 2 formulaires ou tout mettre dans la même balise <form> et est-ce qu'il est possible de faire ça sans utiliser de bouton Submit.

Merci

Autres pages sur : php menus deroulant

a c 232 L Programmation
9 Juin 2011 11:55:52

Salut,

En effet, il ne faut pas faire de submit.

Mais pour ça, il te faudra passer par un peu d'AJAX avec XMLHttpRequest, afin de faire un appel asynchrone vers une page PHP qui te retourne les types pour un matériel donné.
m
0
l
9 Juin 2011 11:58:01

ouhla je sais pas faire ça ^^

et sinon je peux faire en utilisant un bouton "soumettre" et en restant sur la même page ?
m
0
l
Contenus similaires
a c 232 L Programmation
9 Juin 2011 14:03:40

A partir du moment où tu soumets ton formulaire, il va à la page d'action.
Tu peux bien évidemment repasser les valeurs à tes <select> que tu as reçu de ton formulaire.
Mais ça fait un rafraichissement à chaque fois que tu soumets.


Et ce n'est pas très compliqué d'utiliser XMLHttpRequest. Est-ce que tu utilises déjà un framework JavaScript? (JQuery, Prototype, ... ?)
m
0
l
9 Juin 2011 14:16:02

Non j'utilise pas de framework.

Et j'ai essayé de mettre un bouton submit classique avec comme page d'action la même page mais ça ne marche pas.

Qu'est-ce je dos faire ?
m
0
l
a c 232 L Programmation
9 Juin 2011 15:58:29

Il faut que tu resélectionnes la bonne valeur dans ton formulaire
  1. echo '<option value="', $liste['libelle'], '"', $liste['libelle'] == $_POST['libelle'] ? 'selected="selected"' : '' ,'>', $liste['libelle'], '</option>';
m
0
l
9 Juin 2011 16:15:07

Je suis pas sur de tout comprendre je dois faire pour les deux menus ? est-ce que je dois quand même mettre un bouton submit ?

Et autre question : je pense que j'ai un problème pour récupérer la valeur de $libelle2 quand je fais :
$libelle2 = ($_POST['libelle2']);

parce qu'en fait mon problème c'est que dans mes deux menus le champ s'appelle libelle (car dans ma BDD les 2 champs s'appellent libelle).

Pouvez-vous m'aider ?
m
0
l
a c 232 L Programmation
9 Juin 2011 17:53:07

Bah vu que tu ne veux pas mettre d'AJAX, tu peux rafraichir les listes déroulantes en submittant ton formulaire à chaque fois. Mais pour ça il faut que tu resélectionnes le bon élément.
Et le code que je t'ai donné rajoute selected="selected" dans l'option de l'élément sélectionné.


$_POST['libelle2'] te permet de récupérer la valeur que tu as sélectionné dans ta 2ème liste déroulante de ton formulaire (<select name="libelle2">)
m
0
l
10 Juin 2011 09:41:47

Merci beaucoup ça marche, j'arrive bien à récupérer mes 2 paramètres, par contre j'ai une petite question, pourquoi quand je choisis une marque la page se rafraichit et le menu déroulant affiche la marque que j'ai choisi alors que pour le type, mon choix est bien pris en compte mais, après que la page s'actualise, le menu affiche "Tous les types" et non le choix que je viens de faire, ci-dessous mon code :


  1. //**********Choix de la marque*********//
  2. echo '<form method="post" action="traitementmarque2.php">';
  3. echo '<p align="center"><select onchange=submit() name="libelle" id="libelle">';
  4. $resu=mysql_query("SELECT libelle FROM ouapi_ha_marque" );
  5. echo '<option value="">---Choisir une marque---</option>';
  6. echo '<option value="Toutes les marques">Toutes les marques</option>';
  7. while ($liste = mysql_fetch_array($resu))
  8. {
  9. echo '<option value="', $liste['libelle'], '"', $liste['libelle'] == $_POST['libelle'] ? 'selected="selected"' : '' ,'>', $liste['libelle'], '</option>';
  10. }
  11. echo '</select></p>';
  12.  
  13. $libelle = ($_POST['libelle']);
  14.  
  15. //***********Choix du type*************//
  16. echo '<p align="center"><select onchange=submit() name="libelle2" id="libelle2">';
  17. $resu2=mysql_query("SELECT libelle FROM ouapi_ha_type");
  18. echo '<option value="">---Choisir un type---</option>';
  19. echo '<option value="Tous les types">Tous les types</option>';
  20. while ($liste2 = mysql_fetch_array($resu2))
  21. {
  22. echo '<option value="', $liste2['libelle'], '"', $liste2['libelle'] == $_POST['libelle'] ? 'selected="selected"' : '' ,'>', $liste2['libelle'], '</option>';
  23. }
  24. echo '</select></p>';
  25.  
  26. $libelle2 = ($_POST['libelle2']);
  27.  
  28. echo '</form>';
m
0
l
a c 232 L Programmation
10 Juin 2011 10:31:21

Pour le 2ème, il faut utiliser $_POST['libelle2']
m
0
l
10 Juin 2011 10:40:54

Cool ! Merci beaucoup ça marche
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS