Problème liste déroulante en php/mysql

Nouveau WRInaute
Bonjour à tous,

J'ai besoin d'aide pour un problème qui me fait tourner en rond depuis des heures...
J'aimerai créer dans un formulaire, une liste déroulante qui listerait des catégories et leurs sous-catégories respectives de manière "aérée" pour que ce soit bien lisible pour l'utilisateur, et voici le code que j'ai mis en place :

Code:
<?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.
 
WRInaute impliqué
Code:
while ($row = mysql_fetch_array($catList))
   {
      $string = "<option value='";

Tu reset ta variable "$string" à l'intérieur de la boucle, normal que ca va pas :roll:
$string = "<option value='";
 
Nouveau WRInaute
Je te remercie beaucoup... tu peux pas imaginer combien d'heures j'ai passé à cause de ce foutu point manquant...

Maintenant j'ai juste une erreur notice, alors si tu pouvais me dire comment la régler je t'en serais reconnaissant, sinon c'est pas grave car par la suite je ne vais pas faire afficher ce genre d'erreurs. Encore une fois merci.

Notice: Undefined variable: string in....... on line 70 (c'est la ligne en question)
 
WRInaute accro
Vu que tu concatenes string ($string .= ....) il faut définir $string avant la boucle while:
Code:
$string = '';
 
WRInaute impliqué
Dax701 a dit:
Je te remercie beaucoup... tu peux pas imaginer combien d'heures j'ai passé à cause de ce foutu point manquant...
Si, j'imagine bien, j'ai déja eu le coup où j'avais mis "return" dans la boucle :oops:
 
Discussions similaires
Haut