[RESOLU] boucle récursive pour fil d'ariane

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] boucle récursive pour fil d'ariane

par LunaFOx » 25 août 2008, 13:37

Non, personne ?

par LunaFOx » 10 août 2008, 23:58

Personne n'a l'explication du pourquoi du comment ?

Bien à vous !

LunaFOx

par LunaFOx » 09 août 2008, 23:55

Bonsoir,

Au final, ca marche je suis ravie mais je ne comprends pas un truc.
Mon idée était de sortir un string avec des / pour refaire un explode et trier dans le sens inverse mais j'ai même pas eu besoin de faire l'explode l'echo m'a tout ressorti dans le bon ordre, celui voulu, bizarre non ? Une explication messieurs ? J'aimerai comprendre cette bizarerie ^^

LunaFOx

Ps: désolée pour le résolu...

par katagoto » 07 août 2008, 15:45

Modération :
LunaFOx, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.
Euh, il/elle est pas inscrit(e)...

par ouckileou » 07 août 2008, 14:58

Pourquoi ta fonction est-elle déclarée en plein milieu du code ? Tu redéclares la fonction à chaque tour de boucle...
"recurse" ne me paraît pas super approprié comme nom, elle est récursive ok mais ça ne nous dit pas ce qu'elle fait, juste en lisant le nom.

Bon si ça fonctionne c'est parfait :)

Modération :
LunaFOx, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par LunaFOx » 07 août 2008, 14:46

JE CROIS QUE J'AI TROUVE YOUPIIII SANS ARRAY !!!!

J'ai juste rajouté

$final ="";


dans le while :
$final = $final.'<a href="'.$row["url_arbo"].'">'.$row["nom_arbo"].'</a> > ';
sans le echo

et après : recurse($row["id_arbo"],$row["parent_arbo"],$row["url_arbo"]);
echo $final;

et voilà :D

MERKI A TOUS !!!!

LunaFOx

LunaFOx

par Invité » 07 août 2008, 14:19

J'oubliais, ca me renvoie

index 1.4 > index 1 > home (ok mais dans le mauvais sens) puis index1.4.9 par le dernier echo
mon idée étant d'inverser les enregistrements comme ceci :
home > index 1 > index 1.4 >
avec le dernier echo
home > index 1 > index 1.4 > index1.4.9 (résultat escompté)

LF

par LunaFOx » 07 août 2008, 14:15

Bon j'ai beau cherché je n'arrive pas à déclarer et incrémenter mon tableau associatif comme il le faut/je voudrais.

Voici le code actuel :
<?php 
//on répère où on est...
$here = explode("/",$_SERVER["PHP_SELF"]);
$pagehere = end($here);
	$q = 'SELECT * FROM tb_arbo WHERE url_arbo = "'.$pagehere.'"';
	$r = mysql_query ($q);
		while ($col = mysql_fetch_array ($r)){
			$var1=$col["id_arbo"];//on définit pour point de départ et echo final
			$var2=$col["parent_arbo"];
			$var3=$col["url_arbo"];
			$var4=$col["nom_arbo"];

				function recurse($id,$par,$url){//fonction boucle récursive remontante
				$query = 'SELECT * FROM tb_arbo WHERE id_arbo = "'.$par.'"';
				$result = mysql_query ($query);
					while ($row = mysql_fetch_array ($result)){
					echo '<a href="'.$row["url_arbo"].'">'.$row["nom_arbo"].'</a> > '; 
					recurse($row["id_arbo"],$row["parent_arbo"],$row["url_arbo"]);//on boucle sur la boucle 
					}
				}
	recurse($var1,$var2,$var3);
echo '<a href="'.$var3.'">'.$var4.'</a> > '; //on affiche le fameux point de départ boucler la boucle
}
?>
Une ch'tite idée ?

Luna

par ouckileou » 07 août 2008, 13:51

Il n'y a possibilité de dire au mysql_fetch_array de sortir tous les enregistrements finaux de façon décroissante
Non puisque comme tu l'as dit toi-même, tu fais plusieurs requêtes et ne récupère qu'1 tuple à chaque fois
ou suis-je obligée de mettre tout dans un array et le retrier (un peu lourd mais bon)
Pourquoi pas oui. Tu mets ton code dans une fonction, qui te renvoie un tableau et que tu affiches ensuite. Déjà ça sépare un peu le code (traitement/affichage)

Et ce qui est lourd là dedans ce sont les select multiples, pas la manip du tableau.

=> http://uk3.php.net/manual/fr/function.array-reverse.php

par LunaFOx » 07 août 2008, 13:10

Merci Dunbar

j'avais essayé et bien non, car à chaque fois dans la boucle récursive il n'y a qu'un seul et unique résultat renvoyé à moins que j'ai loupé une étape...

Belle prise de tête :evil:

LF

par dunbar » 07 août 2008, 12:54

Et un
ORDER BY `id` DESC 
Ne fonctionnerait pas :?:

par LunaFOx » 07 août 2008, 12:49

Bonjour ouckileou,

Ravie qu'un vip modérateur s'intéresse à mon problème (on se sent moins seule ^^)
Je veux au maximum me débrouiller car je suis pas une fainéante. Depuis ce matin, j'ai progressé et j'arrive enfin à un résultat quasi satisfaisant sauf que tout est inversé :roll:

Je pars bien de ma page pour arriver à l'accueil sauf que mon fil d'ariane donne :
index1.4.9 > index 1.4 > index 1 > home (lol)

Il n'y a possibilité de dire au mysql_fetch_array de sortir tous les enregistrements finaux de façon décroissante ou suis-je obligée de mettre tout dans un array et le retrier (un peu lourd mais bon)

Merci à toi

LunaFOx

par ouckileou » 07 août 2008, 12:12

Indente ton code déjà, et montre nous le résultat que ça donne

par LunaFOx » 07 août 2008, 11:19

Voilà où j'en suis :
$here = explode("/",$_SERVER["PHP_SELF"]);
$pagehere = end($here);
$query = 'SELECT * FROM categories WHERE url = "'.$pagehere.'"';
//echo 'query : '.$query.'<br />';
$result = mysql_query ($query);
while ($row = mysql_fetch_array ($result)){
$parent = $row["parent"];
//echo 'parent : '.$parent.'<br />';
echo '<a href="'.$row["url"].'">'.$row["intitule"].'</a><br />'; 
if ($parent!=0){
$new_query = 'SELECT * FROM categories WHERE id = '.$parent;
//echo 'new_query : '.$new_query.'<br />';
$new_result = mysql_query ($new_query);
while ($new_row = mysql_fetch_array ($new_result)){
echo '<a href="'.$new_row["url"].'">'.$new_row["intitule"].'</a><br />'; 
}
}else{
echo 'index : la page d\'accueil';
}
}
Je voudrais automatiser ma 2de requête pour qu'à partir du premier point on remonte jusqu'au niveau 0, une boucle récursive remontante. HELP phpistes !

LunaFOx

par LunaFOx » 07 août 2008, 10:48

Bonjour,

petite nuit pour moi et toujours mon fichu problème :?

Est-ce que quelqu'un aurait un moyen d'exclure les pages soeurs de ma boucle, en fait de préserver l'unicité du fil ?

LF