# Stammbaum mit PHP und MySQL



## smyle (2. Dezember 2010)

Hallo

Ich möchte auf meiner Homepage einen Stammbaum mit PHP (MySQL, HTML) machen. 
Und zwar sollte man, bei den Personen auch Photos mit einer gewissen grösse (Zum Beispiel Passfotos) hochlanden könne.
Die Registrierten User, welche der Familie angehören, sollen den Baum auch erweitern können.
Und alles was sonst so zu einem Stammbaum gehört.

Kenn jemand ein gutes Tutorial den ich gebrauchen kann um mein Stammbaum zu erstellen? Oder einen schon fertigen Script denn man beliebig ändern kann?

Ich habe im Internet nach Stammbaum Script gesucht und bin nur auf diese Seite gestossen. Leider kann man hier nichts mehr downloaden  
http://www.eberhard-theis.de/index.php?lang=de&setcase=ahnen&PHPSESSID=cpdjov2v4u198rurr47p64iiv2

Oder kann mir jemand einen Ansatz geben, wie ich da überhaupt mit programmieren beginnen soll? Ich kann mir den Code gar nicht vorstellen, weis gar nicht wo ich beginnen soll, falls ich das alleine Coden müsste.


Ich bedanke mich im Voraus für eure Hilfe.

LG
Smyle


----------



## Bratkartoffel (2. Dezember 2010)

Hi,

als erstes würde ich hier ein Datenbankmodell entwerfen. Die verschiedenen Tabellen mit den benötigten Feldern erstellen und sich die Beziehungen zwischen den Tabellen überlegen.
Ganz rudimentär kann man ja folgende Angaben voraussetzen:

Tabelle person:
- name
- geburtsdatum
- foto
- vater
- mutter

Sowohl Vater, als auch Mutter verweisen an "name". Bei dem obersten Eintrag, oder falls mutter und/oder Vater unbekannt ist, sind diese Felder dann entsprechend NULL.
Ich weiß ja nicht, wie weit dein Stammbaum zurückgehen soll, oder ob es bei dir mehrere Personen mit dem selben Namen gibt. Wenn dies der Fall ist, dann würde ich noch ein Feld "ID" hinzufügen, und Mutter / Vater auf ID verweisen lassen.

Dies wäre mal ein grobes Schema für den Stammbaum selbst. Für deine Benutzer brauchst du halt entsprechend noch eine extra Tabelle, mit den entsprechenden Feldern und Berechtigungen.

Gruß
BK


----------



## smyle (2. Dezember 2010)

Ich habe nun eine Datrnbankschema erstellt.

Wenn ich nun anfange zu Programmieren, wie muss ich den Stammbaum Programmieren? Damit meine ich, ein Stammbaum ist ähnlich aufgebaut wie ein Diagramm. Und nun müsste ich ein solches Diagramm mit PHP erstellen. Wie mach ich das?
Muss ich für jeden User, Bilder nehemn und den Text darüber schreibrn oder gibt es dafür einen bestimmten Code/Tag um eine solche Linie mit Bild/Name zu erstellen?

Übrigens habe ich in für meine Personentabelle eine ID genommen da in meiner Familie den selben Namen öffters vorkommt.
Daher beziehn sich Mutter_ID und Vatter_ID auf eine bestimmte ID, einer bestimmten Spalte der selben Tabelle.

Wie muss ich nun weiterfahren?


----------



## Halpha (3. Dezember 2010)

bau dir erstmal mit html und css das Gerüst. Dann lässt du dir einen einzigen fertigen Stammbaum ausgeben. D.h Vater Mutter, Kinder, Ehefrau was du halt alles willst. 

Das ganze immer über eine Id festgelegt zu dem jeweiligen Nutzer. Um dann den Stammbaum von einem anderen zusehen würd ich das via Link machen. D.h man klickt auf ein Bild von jemanden und dadurch wird eine neue Id übergeben. Und somit dem sein ganzer Stammbaum ausgegeben.


----------



## Bratkartoffel (3. Dezember 2010)

Hi,

ich hab leider im Moment nicht so viel Zeit, dass ich mir das Ganze erarbeiten könnte, aber grundlegend würde ich jetzt anfangen, die Datenbankabfragen zu entwerfen. Also quasi wie du die Daten am Besten aus der Datenbank rausbekommst.

Als nächstes musst du dir überlegen, wie du die Daten dann in PHP abbildest. Hier würde ich zu einem Baum greifen (wie passend, oder? ) und diesen dann Stück für Stück zusammensetzen.
Also eine Klasse, welche ähnlich wie die Datenbankstruktur aufgebaut ist, nur halt nicht mit Fremdschlüsseln arbeitet, sondern mit Instanzen von sich selbst. Der Zugriff sollte dann in etwa wie folgt geschehen:

```
$baum = new Stammbaum("Max Mustermann");  // Eine Person, die als letztes im Baum (ganz unten) auftauchen soll (also noch keine Kinder hat / oder diese nicht interessant sind)

$baum->getMutter()->getVater();  // Liefert den Großvater von Max (mütterlicher Seits)
$baum->getVater()->getVater()->getVater(); // Liefert den Urgroßvater von Max (immer väterlicher Seits);
// usw.
```

Hier würde ich auch eine statische Klasse machen, die alle Instanzen von Person speichert. Somit kannst du zum Beispiel mit "$max->setVater(Personen::getPerson("<ID, z.B.: 3>"))" den Vater von Max anlegen. Falls es schon eine Person mit der ID 3 gibt, dann wird die gleiche Instanz zurückgegeben. Somit kannst du mit deiner Datenbank zum Beispiel folgendes machen:

 Für alle Einträge in der Tabelle, mache:
 -- Personen::getPerson(ID)->setVater(Personen::getPerson(Vater_ID));
 -- Personen::getPerson(ID)->setMutter(Personen::getPerson(Mutter_ID));
 Suche dir die Personen, die keine Kinder haben (die, auf die kein Verweis als Vater_ID oder Mutter_ID gibt)

Somit solltest du Programmtechnisch schon einmal den Stammbaum korrekt implementiert haben. Testweise kannst du dir ja einen "ganz unten" holen und ein var_dump(Person) machen, dann sollte er dir die Struktur auf dem Bildschirm ausgeben.

Das grafische würde ich erst ziemlich am Schluss angehen, meiner Meinung nach ist die Logik vorerst mal das wichtigste.

Gruß
BK


----------



## smyle (3. Dezember 2010)

Ich werde es mal versuchen, und mich natürlich melden wenn ich nicht mehr weiter weiss (Das wird sicher bald wieder sein :S ).

Aber vielen Dank für die Hilfe bis her. Schade gibt es kein fertiges Stammbaum oder Tutorial zum herunterladen, bei welchem man einfach nur die Daten eingeben muss.


----------



## Yaslaw (3. Dezember 2010)

google nach +PHP +Stammbaum
Erster Treffer: http://mrfoo.de/archiv/269-Freie-Stammbaum-Software-in-PHP.html

google nach +PHP +family tree
Da findest du auch diverses


----------

