Problème liste déroulante formulaire

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 :

<?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.= "&nbsp;&nbsp;&nbsp;";
			
			$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:

2 réponses

Alain_42 Messages postés 5413 Statut Membre 894
 
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:
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 = "";
0
Maxime
 
Merci, j'ai corrigé le if(!mysql.... c'est vrai que c'est plus approprié.
0