Salut a vous,
Alors je continu dans la création de mon forum, voila un nouveau probleme pour moi. D'abord le code ce sera plus simple :
function selectcat($id2,$st=array(),$rs="")
{
$qnm=mysql_query("SELECT id, id_parent FROM arbo WHERE id_parent='$id2'");
while($res3=mysql_fetch_array($qnm))
{
array_push($st,''.$res3['id'].'');
selectcat($res3['id']);
}
$i=0;
while ($i<sizeof($st))
{
$rs.= " OR cate=$st[$i] ";
$i++;
}
echo $rs;
return $rs;
}
Supposons que j'ai 3 catégories le echo va me marquer "OR cate=1 OR cate=2 OR cate=3" il le fait trés bien. Le probleme est que le echo est la juste pour controlé que la boucle fonctionne bien. Le but est de récupéré cette valeur $rs dans le reste du script et la quand je fait "echo selectcat(...);" il me marque seuleument "OR cate=3" et zap les premier passage de la boucle pourquoi et comment résoudre ce problème
Merci a vous
PS:j'espere que j'ai bien indenter mon code...
A voir également:
Help, fonction pour transmettre une variable créer a l'issu d'une boucle
salut,
ba dans ta premiere boucle while {} tu fais appelle a la meme fonction (récursivité)
normal que tu recuperes que les derniers valeurs...
solutions => tes variables $st ,$rs doivent etre declarées en dehors de la fonction..
<hr size="2" width="100%" />Au début, on essaye de trouver une solution qui marche, et puis on veut la meilleure.
J'ai essayé de les déclarer en dehors de la fonction, mais elle ne sont pas reconnues dans la fonction après. J'ai essayé avec global mais du coup la variable est remise a sa valeur initial. Si tu pouvais m'indiquer aussi le code ou comment déclaré a l'exterieur de la variable pour ensuite récupé le résultat de ma boucle, désolé je suis un peu perdu avec cette fonction.
Merci
salut,
declare tes var en dehors de la fonction, ta fonction n'aura comme param que $id2
donc function selectcat($id2){....}
<hr size="2" width="100%" />Au début, on essaye de trouver une solution qui marche, et puis on veut la meilleure.
Quand même...
si tu utilises mysql_fetch_array(), et que tu ne te sers que des index associatifs, utilise la constante MYSQL_FETCH_ASSOC avec.
Ne mets pas non plus ton sizeof() dans le while(). Initialise une variable avant la boucle, qui a pour valeur ton sizeof(), et sers-toi de cette variable dans la boucle.
En fait ca marche pas totalement avec static, car je me sers deux fois de la fonction et a la deuxieme utilisation il me ressort les résultat de la premiere utilisation plus ceux de la deuxieme. Il faudrait remettre a zero les variables statique pour la deuxieme utilisation ?
Merci pour votre aide
function selectcat($id2,$st=array(),$rs="")
{
$qnm=mysql_query("SELECT id, id_parent FROM arbo WHERE id_parent='$id2'");
while($res3=mysql_fetch_array($qnm))
{
array_push($st,''.$res3['id'].'');
selectcat($res3['id'], $st, $rs);
}
$i=0;
while ($i<sizeof($st))
{
$rs.= " OR cate=$st[$i] ";
$i++;
}
echo $rs;
return $rs;
}
Néanmoins tu sais que ton code est à priori foireux ? Je ne pense pas que ton mysql_fetch_array() reprenne le fil après la sortie d'un nouvel appel récursif à ta fonction. C'est à vérifier, mais je pense que ta ressource est écrasée par la suivante (au sein de la mémoire de php).
Voila grace a vous j'ai trouvé, il fallait en effet déclarer les variable en global, mais il fallait quelques petits aménagement dans le reste du script. Entre autre une "réinitialisation" de la variable après son utilisation pour une deuxième utilisation ce qui n'est apparemment pas possible avec une variable static.
Merci.