Se connecter avec
S'enregistrer | Connectez-vous

liste deroulante depandante avec php

Dernière réponse : dans Programmation

Bonjour,

Pour mon site, je veux créer un formulaire avec 2 listes déroulantes sur lesquelles.
si on selectionne une valeur dans la premiere liste (onChange),
je veux que la deuxieme liste soit remplie automatiquement partir d'une table mySQL.

par exemple si je selectionne FRANCE dans la liste1 (qui contient les pays), je veux que la liste2 (qui contient les villes) m'affiche les grandes villes de FRANCE (qui sont generalement dans une table myql).
j'ai pu remplir la liste des pays et non celle des villes (avec php bien sur)
si quelqu'un peut me donner un coup de main.
merci.

Autres pages sur : liste deroulante depandante php

Lassé par la pub ? Créez un compte
Expert Programmation

Si tu fais ça en php, c'est peut-être pas très judicieux, vu qu'il faudra recharger ta page à chaque clic dans le premier menu pour afficher la liste dans le 2e... Mais c'est possible. Par ex : tu link ta valeur de la première liste (France par ex) dans une variable GET et après tu fais une boucle avec condition en php pour dire que si GET existe alors il faut lister toutes les valeurs en dépendant depuis ta table mysql (par ex, il faudra 2 champ par ville : un avec le nom de la ville et un avec le nom du pays). Essaie d'écrire un début de code et on t'aidera à le finir si tu n'y arrives pas ;) 

Oriente plutôt vers du javascript pour le faire. Mais dans ce cas je ne peux pas t'aider, je ne connais pas assez le javascript :/ 

merci pour tout marsien!
ça me touche beaucoup du fait d'essayer.
je vais tout de meme te presenter ma bd avant de vous envoyer le code.
tpays(idpays*,pays); tville(idpays*,idville*,ville);
j'éspere que tu pourras me donner un coup de main, l'essentiel pour moi que ça puisse marcher.


<form method="post" name="fvn"><br>
Pays
<select name="pays" size="1" id="pays" onChange="">
<option value="%" selected>Indifferente</option>
<?php
mysql_connect("localhost","root");
mysql_select_db("autocom");
$requet = "SELECT * FROM pays";
if($resultat=mysql_query($requet))
{
while($ligne= mysql_fetch_row($resultat))
{
$idpays=$ligne[0];
$pays=$ligne[1];
echo '<option value="',$idpays,'">',$pays,'</option>';
}
}
else
{
echo "erreur de la requete";
}
mysql_close();
?>
</select><br><br><br>
Ville
<select name="ville" size="1" id="ville">
<option value="%" selected></option>
</select><br>
<input name="submit" type="submit" value="Envoyer">
<br>
</form>


Expert Programmation

Voilà un exemple de ce qui pourrait être fait en php. Je laisse le soin à ceux qui connaisse l'ajax (javellisant ou non :o  ) de proposé une solution en tirant parti.

Je t'ai commenté le code ci-dessous pour que tu t'y retrouves. Il n'y a rien de très compliqué, mais si il y a un truc qui te parait obscur, n'hésite pas demander :) 

  1. <form method="post" name="fvn" action="test2menuderoulants.php"> <!-- on recharge la page avec le nouveau paramètre induit par la validation d'une option dans le premier menu déroulant, c'est-à-dire la sélection d'un pays -->
  2. <br>
  3. Pays
  4. <select type="checkbox" name="pays" size="1" id="pays" onChange="">
  5. <option value="">Indifferente</option>
  6.  
  7. <?php
  8. mysql_connect("localhost","root","");
  9. mysql_select_db("autocom");
  10. $requet = 'SELECT * FROM pays ORDER BY pays'; // on classe par ordre aphabétique les pays
  11. if($resultat=mysql_query($requet))
  12. {
  13. while($ligne= mysql_fetch_row($resultat))
  14. {
  15. $idpays=$ligne[0];
  16. $pays=$ligne[1];
  17. echo '<option value="' . $idpays . '">' . $pays . '</option>';
  18. }
  19. }
  20. else
  21. {
  22. echo "erreur de la requete";
  23. }
  24. ?>
  25.  
  26. </select>
  27. <input name="submit" type="submit" value="Envoyer"> <!-- peut être remplacer par un javascript onChange... -->
  28. <br><br>
  29. </form>
  30. <br>
  31. <form method="post" name="fvn" action="test2menuderoulants.php"><!--comme pour le premier menu déroulant, on peut recharger la page en appliquant le nouveau paramètre, c'est-à-dire le choix de la ville -->
  32. <br>
  33. Ville
  34. <select name="ville" size="1" id="ville">
  35. <option value="%" selected></option>
  36.  
  37. <?php
  38. if(isset($_POST['pays'])) // on vérifie qu'un pays à bien été sélectionné
  39. {
  40. $requet = 'SELECT * FROM ville WHERE idpays=' . $_POST['pays'] . ' ORDER BY ville'; // on choisit dans la table ville les villes dont le pays correspond à la variable POST, c'est-à-dire à celui qui avait été sélectionné dans le 1er menu déroulant et on les classe par ordre alphabétique
  41. if($resultat=mysql_query($requet))
  42. {
  43. while($ligne= mysql_fetch_row($resultat))
  44. {
  45. $idpays=$ligne[0];
  46. $idville=$ligne[1];
  47. $ville=$ligne[2];
  48. echo '<option value="' . $idville . '">' . $ville . '</option>';
  49. }
  50. }
  51. else
  52. {
  53. echo "erreur de la requete";
  54. }
  55. }
  56.  
  57. mysql_close();
  58. ?>
  59. </select>
  60. <input name="submit" type="submit" value="Envoyer">
  61. </form>


En espérant que c'est ce que tu souhaitais :hello: 
Expert Programmation

> a priori sans erreurs :lol: 

Voila 99.9% des bugs, des trous de sécurités et autres mauvaises surprises dans notre domaine :D  Je crois que je n'ai pas laissé assez de % pour la malveillance :ange: 
Lassé par la pub ? Créez un compte