begin process at 2010 09 09 10:48:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > ARBORESCENCE RECURSIVE DYNAMIQUE

ARBORESCENCE RECURSIVE DYNAMIQUE


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :26/04/2005 Date de mise à jour :27/04/2005 16:47:07 Vu / téléchargé :5 266 / 369

Auteur : balisong1

Ecrire un message privé
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cette source sert a afficher et a indenter dynamiquement les données d'une base(la base utilisée et PostgreSQL mais tres facilement portable sur mysql car les fonctions sont les memes,seul le prefixe change)en utilisant le pere et le fils de chaque données.
Ce code n'est pas entierement de moi, c'est une modification du code posté par Titatou.
J'espere que vous serez indulgeant car je debute en php et c'est ma premiere source :).

Source

  • <?php
  • /*
  • --------------------------------------------------------------
  • | INFORMATIONS DE CONNEXION A LA BASE |
  • --------------------------------------------------------------
  • */
  • $hote = "127.0.0.1"; //il vous suffit de remplacer avec vos parametres de connexion.
  • $port = "5430";
  • $base = "mandbweb";
  • $user = "user";
  • $pwd = "password";
  • // connexion a postgreSQL
  • $conn_string = "host=$hote port=$port dbname=$base user=$user password=$pwd";
  • $conn = pg_connect($conn_string);
  • /*
  • -----------------------------------------------------
  • | AFFICHAGE INDENTÉ DES DONNEES |
  • -----------------------------------------------------
  • */
  • $recherche='1'; //cette variable a ete mise 'en dur' juste pour tester le bon fonctionnement
  • function espace($rang)
  • {
  • $ch= '';
  • for ($x=0;$x<$rang;$x++)
  • {
  • $ch.= '&nbsp;&nbsp;&nbsp;&nbsp;';
  • }
  • $ch.= '<img src=pointilles.gif>&nbsp;';
  • return $ch;
  • }
  • /*
  • FUNCTION recur($pere,$rang,$conn)
  • fonction récursive d'affichage de l'arbre
  • $pere :Element courant
  • $rang :Décallage de l'element
  • $conn :Index de la connexion a utiliser
  • */
  • function recur($pere,$rang,$conn)
  • {
  • if($conn)
  • {
  • // recherche des articles
  • $sql="select ref_nom,ref_article_psf from psf where ref_nom='$pere'";
  • $resultat=pg_query($sql);
  • $nblignes=pg_num_rows($resultat);
  • if($nblignes > 0)// si il y a au moins 1 resultat
  • {
  • for($i=0 ;$i<$nblignes ;$i++)// tant qu'il y a des lignes on affiche les enfants
  • {
  • $ligne=pg_fetch_array($resultat,$i, PGSQL_ASSOC);
  • $parent=$ligne["ref_nom"];
  • $enfant=$ligne["ref_article_psf"];
  • if ($parent==$pere)// si un élément a pour père : $pere
  • {
  • echo espace($rang),"<font color='blue'><b>".$enfant."</b></font><BR />"; // on l'affiche avec le décallage courrant et on recherche ses fils
  • recur($enfant,$rang+1,$conn); // en rappelant la fonction recur() (+ incrémentation du décallage)
  • }
  • }
  • }
  • }
  • else
  • {
  • echo"Erreur de connexion";
  • }
  • }
  • echo"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color='red'><b>$recherche</b></font><br>";
  • recur($recherche,1,$conn);
  • ?>
<?php

	/*
	--------------------------------------------------------------
	|			  INFORMATIONS DE CONNEXION A LA BASE			 |
	--------------------------------------------------------------
	*/
	
	$hote = "127.0.0.1";      //il vous suffit de remplacer avec vos parametres de connexion.
	$port = "5430";
	$base = "mandbweb";
	$user = "user";
	$pwd = "password";
				
	//	connexion a postgreSQL
	$conn_string = "host=$hote port=$port dbname=$base user=$user password=$pwd";
	$conn = pg_connect($conn_string);
	

	/*
	-----------------------------------------------------
	| 			AFFICHAGE INDENTÉ DES DONNEES			|
	-----------------------------------------------------
	*/
	
	$recherche='1'; //cette variable a ete mise 'en dur' juste pour tester le bon fonctionnement
		
	function espace($rang)								
	{													
	    $ch= '';										
	    for ($x=0;$x<$rang;$x++)						
	    {
	    	$ch.= '&nbsp;&nbsp;&nbsp;&nbsp;';
	    }
            $ch.= '<img src=pointilles.gif>&nbsp;';
	    return $ch;
	}	
	
			
	/*	
	FUNCTION recur($pere,$rang,$conn)	  
	fonction récursive d'affichage de l'arbre
		$pere :Element courant
		$rang :Décallage de l'element
		$conn :Index de la connexion a utiliser
	*/
																							
	function recur($pere,$rang,$conn)															
	{																							
		if($conn)																				
		{																						
			//	recherche des articles							
			$sql="select ref_nom,ref_article_psf from psf where ref_nom='$pere'";				
			$resultat=pg_query($sql);
			$nblignes=pg_num_rows($resultat);
						
			if($nblignes > 0)//	si il y a au moins 1 resultat
			{								
				for($i=0 ;$i<$nblignes ;$i++)//	tant qu'il y a des lignes on affiche les enfants
				{					
					$ligne=pg_fetch_array($resultat,$i, PGSQL_ASSOC);
					
					$parent=$ligne["ref_nom"];
					$enfant=$ligne["ref_article_psf"];
										
					if ($parent==$pere)//	si un élément a pour père : $pere
					{				
						echo espace($rang),"<font color='blue'><b>".$enfant."</b></font><BR />";	//	on l'affiche avec le décallage courrant	et on recherche ses fils	
						recur($enfant,$rang+1,$conn);				//	en rappelant la fonction recur() (+ incrémentation du décallage)
					}
				}			
			}			
		}
		else
		{
			echo"Erreur de connexion";	
		}		
	}	
	
	echo"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color='red'><b>$recherche</b></font><br>";
	recur($recherche,1,$conn);
	
?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 avril 2005 17:17:26 :
26 avril 2005 17:18:52 :
26 avril 2005 17:26:50 :
changement de categorie
27 avril 2005 16:47:07 :
mise a jour de l'impression d'ecran et du code,ajout de l'image pointilles.gif qui relie un pere a ses fils.

 Sources de la même categorie

Source avec Zip CLASSE POUR L'API DE GOOGLE BOOK par Arto_8000
Source avec Zip PDS-PERTINENCE par bcmfr
Source avec Zip PDS-SONDAGES par bcmfr
Source avec Zip ENVOIE MAIL EN HTML AVEC PHP PAS DE SPAM SUR HOTMAIL ET GMAI... par Dje33
Source avec Zip Source avec une capture AFTERPHP REMPLACEMENT DE BALISES INVENTEES PAR DES BALISES E... par Aulios

Commentaires et avis

Commentaire de Anthomicro le 27/04/2005 00:49:09

Salut ;-)

Très bien pour une première source ;-)

Je te dis maintenant ce que je remplacerais :

<BR> et <br> par <br />

toutes les doubles quotes " par des simples quotes ' (sauf pour le "\n")

Ensuite, c'est plus important, j'essaierai de ne faire qu'une reqûete mysql pour sélectionner tous les articles et traiter ensuite via php en fonction du numéro de la cat, ce qui serait plus rapide que de faire X requêtes qui sélectionnent à chaque fois la n ième cat :-)

Voilà ;-)

Je te mets 8/10

a ++

Commentaire de balisong1 le 27/04/2005 09:55:08

merci pour les conseils et pour la note :) , mais je ne pense pas que faire une seule requete au debut soit plus rapide,en effet en faisant ca je ferais une requete qui selectionnerait un peu plus de 200 000 articles donc je pense que ca ramerais un peu. :)

Commentaire de Anthomicro le 27/04/2005 11:07:26

Bah justement, tu les sélectionnes tous et tu les parse une fois, tandis que là tu dois rechercher dans une table de 200000 articles une valeur (la cat) c'est plus lourd à mon avis, enfin bon faut tester pour en être sûr.

a +

Commentaire de Kirua le 27/04/2005 15:10:22

dans la mesure où tu vas quand même tt récupérer, t'as intérêt à tout demander. ça va forcément plus vite de demander un fichier complet que 1000 fois ses millièmes parties.

Commentaire de balisong1 le 27/04/2005 15:43:29

en effet dans le cas ou un pere a beaucoup de fils et si chaque fils est lui meme pere de plusieurs autres fils etc..,dans ce cas la il est plus avantageux de tout selectionner des le depart.
mais si le pere renseigné n'as que 2 fils par exemple,ca va ralentir inutilement le chargement de la page.

enfin je testerais les 2 solutions et je vous tiendrais au courant.

Commentaire de malalam le 29/04/2005 13:13:00 administrateur CS

Hello,

=> dans la mesure où tu vas quand même tt récupérer, t'as intérêt à tout demander. ça va forcément plus vite de demander un fichier complet que 1000 fois ses millièmes parties.

A une epoque ou l'on ne possedait que le dialup pour aller sur internet, une technique pour acceler le chargement des images consistait, pour le webmaster, a decouper son image en tout plein de petites images, et de reconstituer le tout a l'affichage...
Comme quoi, ce n'est apparemment pas toujours vrai ;-)

Commentaire de Anthomicro le 29/04/2005 13:25:02

Ce n'est pas pareil, cette technique était plus rapide car la faille venait des réglages de Windows entre autre (MTU et autres Rwin) qui se réglaient via les logiciels appropriés ou via la base de registres directement.

Là on parle d'un truc en local ou sur un serveur ;-)

Commentaire de malalam le 29/04/2005 13:32:46 administrateur CS

J'ai pas dit le contraire, j'ai juste dit que donc, ce n'etait pas toujours vrai...nuances, lol. Je n'ai pas dit qu'il n'y avait pas de raisons a ca ;-)

Commentaire de Anthomicro le 29/04/2005 13:37:07

Ouais je suis d'accord avec toi ;-)

Commentaire de silverstars le 31/05/2005 11:34:35

serait'il possible d'avoir la structure de la base SVP

Commentaire de Anthomicro le 31/05/2005 14:45:46

$sql="select ref_nom,ref_article_psf from psf where ref_nom='$pere'";

tu la devines avec ça la structure ;-)

Commentaire de xmag le 17/08/2005 10:20:49

Bonjour,

Pour un nombre de champs élevé, est ce que c'est plus rapide que la génération d'un arbre Javascript (avec des petit + pour naviguer dans l'arborescence) ? Sinon, Comment faire pour que la page se charge plus vite?

Commentaire de xmag le 17/08/2005 10:35:52

Est ce qu'il ne serait pas interessant pour les "grosses" arborescences de n'afficher que les éléments sans parents et que lorsque l'on clique sur un des parents, ses enfants directs apparaissent (par un rechargement de la page) ? L'inconvénient principal est le rechargement de la page évidemment...

Commentaire de Anthomicro le 17/08/2005 10:39:53

ça serait largement plus rapide mais tu perds tout l'intérêt du script.

Commentaire de xmag le 17/08/2005 11:02:02

Oui, je sais mais mon arbre est vraiment trop lent à s'afficher... :(

Commentaire de Neopheus le 23/09/2006 11:46:13

Pas étonnant que ton code soit long

Vu ta fonction récursive du fait autant de requete qu'il y a de rubriques dans ton système.

Pourquoi tu fais pas une requete globale au début que tu mets en cache dans un array, que tu interroges par la suite ?

Commentaire de Anthomicro le 23/09/2006 11:48:12

Déjà dit plus haut ;)

Commentaire de ralary le 25/10/2006 17:14:26

Bonjour !

=>"Est ce qu'il ne serait pas interessant pour les "grosses" arborescences de n'afficher que les éléments sans parents et que lorsque l'on clique sur un des parents, ses enfants directs apparaissent (par un rechargement de la page) ? L'inconvénient principal est le rechargement de la page évidemment... "

Le rechargement de la page n'est plus obligatoire avec AJAX, on fait juste un rechargement partiel de la page, c'est à dire les enfants directs d'un élement.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales