Remplir une combobox a partir d'une fonction precedente

Invité
Invité n'ayant pas de compte PHPfrance

17 oct. 2013, 14:32

Bonjour, je rencontre un probleme pour remplir ma deuxieme combox avec restriction.
E effet ma deuxieme combobox doit ce remplir en fonction de ce qui a ete choisie dans la premiere combobox.
Mon site est en mvc.

1°/ j'ai une fonction qui remplit une combobox avec les catégories que je dispose dans ma Bd. [Fonction recuperer_categorie]

2°/ j'ai une deuxième fonction qui doit remplir ma combox des sous catégories qui composent la categorie choisie dans la premiere combobox (1°/). [recuperer_sous_categorie]

Le problème est que je ne vois pas comment faire la restriction en fonction du premier choix. C'est la deuxieme query qui n'est pas bonne. j'ai essaye de mettre
	
where sous_categorie.id_categorie_Categorie = $categorie
Cette condition n'est pas bonne

Modeles :
<?php
   include (dirname(__FILE__).'/../../../connexion.php');
 
function recuperer_categorie()
{
$categorie=array();
 
$query = mysql_query("SELECT *  FROM categorie;",dbconnect()) or die(mysql_error());
while ($row = mysql_fetch_array($query))
{
$categorie[] = $row;
}
return $categorie;
}
function recuperer_sous_categorie()
{
    $sous_categorie=array();
 
$query = mysql_query("SELECT sous_categorie.id_ss_categorie,Libelle_Sous_Categorie  FROM sous_categorie inner join categorie on sous_categorie.id_categorie_Categorie = categorie.id_categorie  where sous_categorie.id_categorie_Categorie = categorie.id_categorie;",dbconnect()) or die(mysql_error());
while ($row1 = mysql_fetch_array($query))
{
$sous_categorie[] = $row1;
}
return $sous_categorie;
}
?>
La vue est comme ceci pour afficer les categorie :
<?php
     
    {
    echo'<select name="Categorie">';
    foreach ($categorie as $row)
    {
    echo"<option value=".$row[0]."> ".$row[1]." </option>";
    }
    }
    echo'</select>';
?>
Ce code la fonction bien

Et le code qui affiche les sous categorie :
<?php
    echo'<select name="Sous_Categorie">';
    foreach ($sous_categorie as $row1)
    {
    echo"<option value=".$row1[0]."> ".$row1[1]." </option>";
    }
     
    echo'</select>';
?>
Celui ci ne m'affiche pas que les sous categorie dont l'id categorie correspond à celui du dessus .



Pourriez-vous m'aider ?

Mammouth du PHP | 571 Messages

17 oct. 2013, 16:21

bonjour,

tu peux le faire en ajax.le principe est le suivant:

-tu places l’événement js onchange() sur la 1ère liste(select).le déclenchement de onchange te permettra d’abord de récupérer l'id(attribut value de Option) de la catégorie puis exécute une requête ajax qui va ensuite interroger la fonction qui renvoie les sous catégories.
-la reponse du serveur sera formée de la lise des sous catégories transformées en json(ou xml...)
-dans la fonction de retour ajax, on parcourt la liste des sous-catégoires retournées puis on les insère sur le 2ème select

en php:

Pour que la fonction recuperer_sous_categorie() liste les sous catégories associées à une catégorie donnée,il faudrait que la fonction recevoive en paramètre l'id de la catégorie.

<?php
//renvoie la liste des sous-catégories associés à une catégorie
function recuperer_sous_categorie($id_categorie)
{
    $sous_categorie=array();
 
$query = mysql_query("SELECT sous_categorie.id_ss_categorie,Libelle_Sous_Categorie  FROM sous_categorie inner join categorie on sous_categorie.id_categorie_Categorie = categorie.id_categorie  where  categorie.id_categorie=$id_categorie;",dbconnect()) or die(mysql_error());
while ($row1 = mysql_fetch_array($query))
{
$sous_categorie[] = $row1;
}
return $sous_categorie;
}