Problème liste déroulante formulaire
Maxime
-
Maxime -
Maxime -
Bonjour à tous,
J'ai besoin d'aide pour créer dans un formulaire, une liste déroulante qui listerait des catégories et leurs sous-catégories respectives , et voici le code que j'ai mis en place :
Si dans ma table "categories" j'ai par exemple 3 catégories configurées comme ci-dessous, le code fonctionne bien et ma liste déroulante n'a pas de problème :
catId....catParentId....catName
1................0................Test
2................1................Test2
3................2................Test3
Par contre dès que je rajoute une autre catégorie principale (donc avec catParentId = 0) comme ci-dessous, le code zappe la première catégorie principale (Test) et s'occupe uniquement de la dernière catégorie principale qui a été créée (Test4) :
catId....catParentId....catName
1................0................Test
2................1................Test2
3................2................Test3
4................0................Test4
5................4................Test5
Est-ce que vous pourriez me dire ce qui ne va pas et/ou d'où peut venir le problème ? Merci d'avance.
J'ai besoin d'aide pour créer dans un formulaire, une liste déroulante qui listerait des catégories et leurs sous-catégories respectives , et voici le code que j'ai mis en place :
<?php
function untree($parent, $level)
{
$parentsql = mysql_query("SELECT * FROM `". PREFIX ."categories` WHERE `catParentId` = $parent ORDER BY `catName`");
$return = "";
if (!mysql_num_rows($parentsql))
{
return;
}
else
{
while($branch = mysql_fetch_assoc($parentsql))
{
$echo_this = "<option value='";
$echo_this.= $branch["catId"];
$echo_this.= "'>";
for ($x=1; $x<=$level; $x++)
$echo_this.= " ";
$echo_this.= $branch["catName"];
$echo_this.="</option>";
$return.=$echo_this;
$rename_level = $level;
$return.= untree($branch["catId"], ++$rename_level);
}
}
return $return;
}
function getCategories()
{
$catList = mysql_query("SELECT * FROM `". PREFIX ."categories` WHERE `catParentId` = 0 ORDER BY `catName`");
while ($row = mysql_fetch_array($catList))
{
$string = "<option value='";
$string.= $row["catId"];
$string.= "'>";
$string.= $row["catName"];
$string.= "</option>";
$string.= untree($row["catId"], 1);
}
return $string;
}
$catList = getCategories();
?>
<select name='catParent'><option value='0'>None</option><?php echo $catList ?></select>
Si dans ma table "categories" j'ai par exemple 3 catégories configurées comme ci-dessous, le code fonctionne bien et ma liste déroulante n'a pas de problème :
catId....catParentId....catName
1................0................Test
2................1................Test2
3................2................Test3
Par contre dès que je rajoute une autre catégorie principale (donc avec catParentId = 0) comme ci-dessous, le code zappe la première catégorie principale (Test) et s'occupe uniquement de la dernière catégorie principale qui a été créée (Test4) :
catId....catParentId....catName
1................0................Test
2................1................Test2
3................2................Test3
4................0................Test4
5................4................Test5
Est-ce que vous pourriez me dire ce qui ne va pas et/ou d'où peut venir le problème ? Merci d'avance.
A voir également:
- Problème liste déroulante formulaire
- Liste déroulante excel - Guide
- Whatsapp formulaire opposition - Guide
- Liste déroulante en cascade - Guide
- Formulaire de réclamation facebook compte désactivé - Guide
- Liste code ascii - Guide
2 réponses
deux choses me chiffonnent:
if (!mysql_num_rows($parentsql)) //même si aucun enr n'est trouvé, mysql_num_rows renvoie 0 donc sera toujours true
{
return;
il vaut mieux tester par:
function untree($parent, $level)
{
...........
$return = "";
cette fonction s'appelle elle même, hors si tu remet la variable à zéro à chaque passage, tu n'aura que le dernier qui restera
essayes en passant cette variable en argument à la fonction et en supprimant bien sur la ligne
$return = "";
if (!mysql_num_rows($parentsql)) //même si aucun enr n'est trouvé, mysql_num_rows renvoie 0 donc sera toujours true
{
return;
il vaut mieux tester par:
if (mysql_num_rows($parentsql) ==0
function untree($parent, $level)
{
...........
$return = "";
cette fonction s'appelle elle même, hors si tu remet la variable à zéro à chaque passage, tu n'aura que le dernier qui restera
essayes en passant cette variable en argument à la fonction et en supprimant bien sur la ligne
$return = "";