begin process at 2012 05 28 07:35:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

aaaahh ça m'enerve !! put*** de fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

aaaahh ça m'enerve !! put*** de fonction

samedi 6 mai 2006 à 18:37:11 | aaaahh ça m'enerve !! put*** de fonction

joebuz

Membre Club

j'essaye de generer un arbre genealogique ascendant d'une personne $id

comment je pourrais faire pour faire la meme chose que le script d'en bas mais sous forme de fonction ou de boucle.
Le script plus bas cherche les parents de $id puis les parents des parents etc..

ici c'est un exemple sur 4 generations mais je souhaiterais un script qui chercher les parents puis les parents des parents, etc. jusqu'a qu'il n'y en ai plus ($id_pere == '0' et $id_mere =='0'), puis que ca ma l'affiche des plus anciens jusqu'a $id organisé comme un vrai arbre genealogique, et que ca affiche toutes les generations enregistrées au-dessus de $id (qu'il y en ai 2 ou 8 ou x)

Voila si qqn peux m'aider ca serait cool car la je sui svraiment pret a me jeter par la fenetre; j'ai essayé avec une fonction qui cherche tout les personnes de l'arbre elle fonctionne mais elle me les met pas dans l'ordre et apres j'arrive pas a faire un affichage correct voici la fonction :

function SelectByID($id_search) {
 $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$id_search'");

  if($data = mysql_fetch_array($sql)){
  $nom = $data['nom'];
  $prenom = $data['prenom'];
  $id_pere = $data['id_parent_pere'];
  $id_mere = $data['id_parent_mere'];
  }

 echo $nom;
 echo "<br />";
 echo $prenom;
 echo "<p />";
 echo "<hr width='50%' align='center'>";

 //echo "<p />id_pere : ".$id_pere."<br />id_mere : ".$id_mere."<p />";

  if(($id_pere != '0')&&($id_pere != '')){
  $donnees = SelectByID($id_pere);
  }

  if(($id_mere != '0')&&($id_pere != '')){
  $donnees = SelectByID($id_mere);
  }
 }




et voici le script (long) pour 4 generations


$sql = mysql_query("SELECT * FROM FA_personne WHERE num='$id'");
  if($data = mysql_fetch_array($sql)){
  $idm1 = $data['num'];
  $idm2 = $data['id_parent_pere'];
  $idm3 = $data['id_parent_mere'];
  }

 
 $sql2 = mysql_query("SELECT * FROM FA_personne WHERE num='$idm2'");
  if($data2 = mysql_fetch_array($sql2)){
  $idm4 = $data2['id_parent_pere'];
  $idm5 = $data2['id_parent_mere'];
  }


 $sql3 = mysql_query("SELECT * FROM FA_personne WHERE num='$idm3'");
  if($data3 = mysql_fetch_array($sql3)){
  $idm6 = $data3['id_parent_pere'];
  $idm7 = $data3['id_parent_mere'];
  }

 
 $sql4 = mysql_query("SELECT * FROM FA_personne WHERE num='$idm4'");
  if($data4 = mysql_fetch_array($sql4)){
  $idm8 = $data4['id_parent_pere'];
  $idm9 = $data4['id_parent_mere'];
  }


 $sql5 = mysql_query("SELECT * FROM FA_personne WHERE num='$idm5'");
  if($data5 = mysql_fetch_array($sql5)){
  $idm10 = $data5['id_parent_pere'];
  $idm11 = $data5['id_parent_mere'];
  }


 $sql6 = mysql_query("SELECT * FROM FA_personne WHERE num='$idm6'");
  if($data6 = mysql_fetch_array($sql6)){
  $idm12 = $data6['id_parent_pere'];
  $idm13 = $data6['id_parent_mere'];
  }


 $sql7 = mysql_query("SELECT * FROM FA_personne WHERE num='$idm7'");
  if($data7 = mysql_fetch_array($sql7)){
  $idm14 = $data7['id_parent_pere'];
  $idm15 = $data7['id_parent_mere'];
  }


 echo "<table border='0' align='center' width='95%' bordercolor='#000000' cellpadding='0' cellspacing='0'>

  <tr height='100'>
   <td align='center' width='12%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm8'");
    if($data = mysql_fetch_array($sql)){
    $nom8 = $data['nom'];
    $prenom8 = $data['prenom'];
    echo $nom8."<br />".$prenom8;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td align='center' width='13%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm9'");
    if($data = mysql_fetch_array($sql)){
    $nom9 = $data['nom'];
    $prenom9 = $data['prenom'];
    echo $nom9."<br />".$prenom9;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td align='center' width='12%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm10'");
    if($data = mysql_fetch_array($sql)){
    $nom10 = $data['nom'];
    $prenom10 = $data['prenom'];
    echo $nom10."<br />".$prenom10;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td align='center' width='13%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm11'");
    if($data = mysql_fetch_array($sql)){
    $nom11 = $data['nom'];
    $prenom11 = $data['prenom'];
    echo $nom11."<br />".$prenom11;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td align='center' width='12%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm12'");
    if($data = mysql_fetch_array($sql)){
    $nom12 = $data['nom'];
    $prenom12 = $data['prenom'];
    echo $nom12."<br />".$prenom12;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td align='center' width='13%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm13'");
    if($data = mysql_fetch_array($sql)){
    $nom13 = $data['nom'];
    $prenom13 = $data['prenom'];
    echo $nom13."<br />".$prenom13;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td align='center' width='12%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm14'");
    if($data = mysql_fetch_array($sql)){
    $nom14 = $data['nom'];
    $prenom14 = $data['prenom'];
    echo $nom14."<br />".$prenom14;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td align='center'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm15'");
    if($data = mysql_fetch_array($sql)){
    $nom15 = $data['nom'];
    $prenom15 = $data['prenom'];
    echo $nom15."<br />".$prenom15;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
  </tr>


  

  <tr height='100'>
   <td colspan='2' align='center' width='25%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm4'");
    if($data = mysql_fetch_array($sql)){
    $nom4 = $data['nom'];
    $prenom4 = $data['prenom'];
    echo $nom4."<br />".$prenom4;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td colspan='2' align='center' width='25%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm5'");
    if($data = mysql_fetch_array($sql)){
    $nom5 = $data['nom'];
    $prenom5 = $data['prenom'];
    echo $nom5."<br />".$prenom5;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td colspan='2' align='center' width='25%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm6'");
    if($data = mysql_fetch_array($sql)){
    $nom6 = $data['nom'];
    $prenom6 = $data['prenom'];
    echo $nom6."<br />".$prenom6;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td colspan='2' align='center'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm7'");
    if($data = mysql_fetch_array($sql)){
    $nom7 = $data['nom'];
    $prenom7 = $data['prenom'];
    echo $nom7."<br />".$prenom7;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
  </tr>
  <tr height='100'>
   <td colspan='4' align='center' width='50%'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm2'");
    if($data = mysql_fetch_array($sql)){
    $nom2 = $data['nom'];
    $prenom2 = $data['prenom'];
    echo $nom2."<br />".$prenom2;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
   <td colspan='4' align='center'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm3'");
    if($data = mysql_fetch_array($sql)){
    $nom3 = $data['nom'];
    $prenom3 = $data['prenom'];
    echo $nom3."<br />".$prenom3;
    }
    else{
    echo "????? ";
    }
   echo "
   </td>
  </tr>
  <tr height='100'>
   <td colspan='8' align='center'>";
   $sql = mysql_query("SELECT * FROM FA_personne WHERE num='$idm1'");
    if($data = mysql_fetch_array($sql)){
    $nom1 = $data['nom'];
    $prenom1 = $data['prenom'];
    }
   echo $nom1."<br />".$prenom1."
   </td>
  </tr>
      </table><p />";

joebuz

lundi 8 mai 2006 à 10:45:20 | Re : aaaahh ça m'enerve !! put*** de fonction

spyro666

En fait il te faut une table dans laquelle sont stockés toutes les personne avec les champs suivants :

ID
Nom
Prenom
ID_Pere
ID_Mere

Les valeurs de champs ID_Pere et ID_Mere proviennent de la même table. Je crois qu'on appel ça des ID recursifs(corrigés moi si j'ai tort).

Avec ça tu peux rescenser autant de monde que tu veux et afficher, avec une fonction récursive, tous les parents, grand parent, etc... en une seule fonction (du moment que, pour des raisons de processeur, ça ne s'étend pas sur plus de 32 générations).

Spyro666 contre le 555
lundi 8 mai 2006 à 14:51:50 | Re : aaaahh ça m'enerve !! put*** de fonction

joebuz

Membre Club
c'est ce que j'ai deja, j'avais meme fait une deuxieme table où etait enregistré les personnes composant l'arbre souhaité uniquement pour pouvoir mieux les traiter ensuite, mais c'est pas mieux !

joebuz

lundi 8 mai 2006 à 15:17:59 | Re : aaaahh ça m'enerve !! put*** de fonction

spyro666

En fait ta solution n'est pas toute fausse. Je me suis pencher sur le problème des arbres généalogiques cet après midi(j'ai même créer un script qui permet de remplir la table pour les test) pour pouvoir t'aider.

Voilà ce qui en est sorti :

<?php
    echo '<pre>';
    $link = mysql_connect("localhost","root","");
   
    mysql_select_db("genealogie",$link);
   
    function Parent($id_pere = 0, $id_mere = 0) {
       
        $SQL = "SELECT * FROM `personnes` WHERE `id`='".$id_pere."' OR `id`='".$id_mere."'";
       
        $Query = mysql_query($SQL) or die(mysql_error() . $SQL);
       
        //echo "\nParent : ".$SQL;
       
        while($Row = mysql_fetch_array($Query)) {
           
            $parentCounter++;
           
            array_push($GLOBALS['all'],$Row);
           
            Parent($Row['id_pere'],$Row['id_mere']);
        }
    }
   
    function Children($id) {
   
        $SQL = "SELECT * FROM `personnes` WHERE `id_pere` = '$id' OR `id_mere` = '$id'";
       
        $Query = mysql_query($SQL);
       
        //echo "\nChild : ".$SQL;
       
        while($Row = mysql_fetch_array($Query)) {
       
            $childCounter++;
           
            array_push($GLOBALS['all'],$Row);
           
            Children($Row['id']);
        }
    }
   
    if(!empty($_POST['id'])) {
       
        static $childCounter = 0;
        static $parentCounter = 0;
        $levelCounter = 0;

        if(is_numeric($_POST['id'])) {
           
            global $all;
            $GLOBALS['all'] = array();
           
            $SQL = "SELECT * FROM `personnes` WHERE `id`=".$_POST['id']."";
           
            $Query = mysql_query($SQL);
           
            $Row = mysql_fetch_array($Query);
           
            //echo $Row['id'];
           
            Children($Row['id']);
           
            Parent($Row['id_pere'], $Row['id_mere']);
           
            print_r($childCounter);
            print_r($parentCounter);
            print_r($GLOBALS['all']);
            //print_r($GLOBALS);
           
           
        }else {
           
            echo $_POST['id'] . utf8_encode(" n'est pas numéric!");
           
        }
       
       
       
    }
    echo '</pre>';
?>
<form method="post">
    <input type="text" name="id"><br>
    <input type="submit">
</form>

Mon système se base sur l'id mais tu peux très bien l'utiliser pour le nom si tu a un champ nom dans ta base.

C'est basé principalement sur les deux fonctions Parent() et Children(). Dis moi si t'as besoin de plus d'aide encore.

Spyro666 contre le 555
lundi 8 mai 2006 à 16:47:02 | Re : aaaahh ça m'enerve !! put*** de fonction

joebuz

Membre Club
Interessant ton script même si je ne comprends rien du tout !!

Enfin, disons que j'en comprends 55% ! c'est deja pas mal, lol !!

Ton script est interessant car il affiche tout les champs de la table sans avoir a se les taper, je connaissais pas comme ça c'est super pratique.

Par contre tu obtiens le mem resultat qu'avec ma fonction SelectByID à savoir tu cherches d'abord tout les peres puis toutes les meres, ce qui fait qu'il ne sont pas dans l'ordre !!! (je suis chiant !)

je m'explique 
Voici comment l'affichage procede :

id--> Dede Junior Juniorette

son pere --> Dede Junior
               son pere --> Dede Patriarche
               sa mere --> Josephine Majorette
sa mere --> Mathurine Juniorette
               son pere --> Marcel Juniorette
               sa mere --> Berthe Pouet


Alors qu'il faudrait :

Dede   Patriarche      Josephine Majorette             Marcel Juniorette      Berthe Pouet

                           Dede Junior                                             Mathurine Juniorette

                                                    Dede Junior Juniorette


Et c'est ça que je n'arrive pas à faire !!!!!

joebuz

lundi 8 mai 2006 à 16:57:53 | Re : aaaahh ça m'enerve !! put*** de fonction

joebuz

Membre Club

Par contre dans ton script : (a la fin)

            print_r($childCounter);
            print_r($parentCounter);

ça sert à rien ça !?

joebuz

mardi 9 mai 2006 à 10:04:00 | Re : aaaahh ça m'enerve !! put*** de fonction

spyro666

Oui effectivement mon print_r ne sert plus a grand chose mais pendant la phase de développement ça me servait a voir combien un individu à de parents et combien d'enfant et petits enfant.

En fait comme mon script est construit il construit l'arbre en partant avec le père, ensuite le sien, ensuite celui de celui-ci. Quand y en a plus il prend la mère du père du père et ainsi de suite. Ensuite pour le classer, si tu a le sexe dans ta base de donnée tu peux essayer de les trier comme ça.

En attendant je vais essayer de créer un système qui te fait une image du tout. Je poste ça dès que c'est fait.

Spyro666 contre le 555
mardi 9 mai 2006 à 18:21:55 | Re : aaaahh ça m'enerve !! put*** de fonction

joebuz

Membre Club
dans ma bdd j'ai

num (auto_increment)
 nom
 prenom
 age
 sexe
 id_pere
 id_mere
 id_conjoint
.....


au debut j'avais essayé de retravailler ma fonction Select By Id() en prenant en compte l'id_conjoint,

par exemple je cherchais $id_pere de la personne $id en boucle
et j'affichais $id_pere et $id_conjoint a côté, mais l'inconvenient c'est que je n'ai pas les parents des meres et que si $id_mere != '' et que $id_pere == '' ca ne m'affichait pas $id_mere, donc du coup j'ai laissé tomber les conjoints !!

Ensuite j'ai créé une deuxieme table où ma fonction Select By Id enregistre tout les membres qu'elle trouve avec 

id
nom
prenom
id_pere
id_mere
id_conjoint 

et

id_enfant qui est l'id de l'enfant_parent de l'arbre

et 

$niveau qui le niveau de generation (pour affichage) id = 0 parents de id = 1 ...

puis j'affiche le tout !!
mais c'est un peu le bordel !!!!! 
et en plus ça fonctionne qu'a moitié ! 

joebuz

mardi 9 mai 2006 à 19:27:09 | Re : aaaahh ça m'enerve !! put*** de fonction

spyro666

En fait il te faudrait encore un champ génération qui s'incrémente pour le passer. Comme ça en partant depuis le dernier né, tu devrais pouvoir trouver les parents (en incrémentant la fameuse génération), leurs parents, les parents de ceux-ci et ainsi de suite.

Spyro666 contre le 555
jeudi 11 mai 2006 à 20:15:41 | Re : aaaahh ça m'enerve !! put*** de fonction

joebuz

Membre Club
non, decidement c'est plus compliqué que je ne le pensais, j'ai bo retourner et triturer mes scripts dans tous les sens je n'ariive à rien !

ya toujours une variable qui pose probleme, ....pffffffffff

faut perseverer, et promis si j'arrive à un truc, je le poste en source !

joebuz



Cette discussion est classée dans : mysql, sql, data, id, echo


Répondre à ce message

Sujets en rapport avec ce message

UPDATE de plusieurs enregistrements dans une boucle [ par kd ] Bonjour à tous, j'essaie depuis un bout de temps de modifier un ensemble d'enregistrement dans une base à l'intérieur d'une boucle mais j'ai une erreu MySQL id? [ par Linuss ] Bonjour à tous, Voilà, lorsque j'essaie de faire un lien qui contient l'id (qui existe au ca sou quelqu'un poserait la question :) d'un tuto, je n'y a envoyer des données récupérer dans une autre page php [ par titsuisse ] Bonjour,Je suis débutant en php et je suis coincé. Voilà mon problème. Je veux faire un site de petites annonces. J'ai plusieurs tables. J'ai une page Mysql erreur, mais où ? [ par Tilix ] Bonjour,Je voudrais savoir où est l'erreur dans ceci :while($data = mysql_fetch_assoc($req))     {   if ('!'.$data['id'].'') { echo '(0)'; }    else { problème de requete SQL avec ID aléatoire [ par djinko ] Bonsoir,Ayant chercher pendant des heures et des heures, je me tourne vers vous pour avoir une explication car franchement, je nage...J'ai crée un esp Un tableau pas très sympa.... [ par ndsaerith ] Salut tout lemonde ! Ca faisait longtemps.... J'ai une petite question toute bête à vous poser, sur un de mes tableaux. C'est un tableau html à la bas effacer - modifier news [ par picogunsy ] Bonjour à tous, J'aimerai simplement savoir comment à partir de mon code ci-dessous faire un lien sur les deux mots en rouge dans mon code  pour sup formulaire php et variable [ par Bulledanslair ] Bonjour à vous.Il me manque un quelquechose pour envoyer le variable $data['nFeuilDpAir'] dans la page feuille_de_palanquees.php pour son affichage.Da probleme mysql ou php [ par gaucyril ] Bonjour à tous,J'ai donc un petit problème. J'ai le code suivant :$sql = 'SELECT * FROM query WHERE valid="1"';$req = mysql_query($sql) or die('Erreur Problème de variables en dehors d'une class [ par yukimura27 ] Bonjour à tous, J'ai un problème pour utiliser une variable en dehors de ma class. Voici mon code: class pouet { public function SelectAll () {


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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 : 6,864 sec (3)

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