liste deroulante depandante avec php

  • Auteur de la discussion moilim2006
  • Date de début

moilim2006

Nouveau membre
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.
 

marsien

Grand Maître
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 :/
 

moilim2006

Nouveau membre
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>


 

marsien

Grand Maître
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 :)

[cpp] <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 -->
<br>
Pays
<select type="checkbox" name="pays" size="1" id="pays" onChange="">
<option value="">Indifferente</option>

<?php
mysql_connect("localhost","root","");
mysql_select_db("autocom");
$requet = 'SELECT * FROM pays ORDER BY pays'; // on classe par ordre aphabétique les 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";
}
?>

</select>
<input name="submit" type="submit" value="Envoyer"> <!-- peut être remplacer par un javascript onChange... -->
<br><br>
</form>
<br>
<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 -->
<br>
Ville
<select name="ville" size="1" id="ville">
<option value="%" selected></option>

<?php
if(isset($_POST['pays'])) // on vérifie qu'un pays à bien été sélectionné
{
$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
if($resultat=mysql_query($requet))
{
while($ligne= mysql_fetch_row($resultat))
{
$idpays=$ligne[0];
$idville=$ligne[1];
$ville=$ligne[2];
echo '<option value="' . $idville . '">' . $ville . '</option>';
}
}
else
{
echo "erreur de la requete";
}
}

mysql_close();
?>
</select>
<input name="submit" type="submit" value="Envoyer">
</form>[/cpp]

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

boub popsyteam

Grand Maître
marsien -> Tu ne verifie pas la validité du contenu de ta variable $_POST['pays'] avant de l'inserer dans ton SQL ? :o
 

marsien

Grand Maître
C'est vrai, mais vu le principe du script, je ne le jugeais pas nécessaire. Ce sont des listes déroulantes fermées dont le contenu est issu de bases sql a priori sans erreurs...

:)
 

boub popsyteam

Grand Maître
Y'a moyen de faire (subir dans le cas présent) du SQL injection avec ce genre de 'détails' :o

Enfin c'est un peu HS ;)
 

zeb

Modérateur
> 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:
 

marsien

Grand Maître
Vous avez parfaitement raison :merci:

Charge au demandeur d'améliorer et sécuriser ce script en tenant compte de vos conseils. ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 072
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut