cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008
-
19 mars 2008 à 15:05
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008
-
20 mars 2008 à 15:44
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...
amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 20155 19 mars 2008 à 16:49
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.
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008 19 mars 2008 à 17:25
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
amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 20155 19 mars 2008 à 19:50
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.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 mars 2008 à 20:18
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.
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008 19 mars 2008 à 21:03
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
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 mars 2008 à 08:22
Bah dans ce cas :
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).
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008 20 mars 2008 à 15:44
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.