 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
05.08.2003, 12:49
|
#1
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
Rekurisve Funktion probs
Hi Folks!
Hab mir eine rekursive Funktion gebaut mit der ich eine Art Navigation ala Explorer dartstellen will.
PHP-Code:
// Rekurisve Funktion für darstellen des Baums
function getBaum ($id,$openID,$space="",$level=0){
$baum = "";
$erg = $this->query("SELECT objekt_id,name,mutterobjekt_id FROM objekte WHERE mutterobjekt_id = '".$id."'");
while ($record = mysql_fetch_array($erg)){
if ($level == 0) $baum.= $space."<a class=\"navi\" onClick=\"javascript:zweiFrames(0,'navi.php?openID=".$record['objekt_id']."',1,'showobjekt.php?objekt_id=".$record['objekt_id']."');\" href=\"#\">".$record['name']."</a><br />";
else $baum.= $space."<a target=\"mainFrame\" class=\"navi\" href=\"showobjekt.php?objekt_id=".$record['objekt_id']."\">".$record['name']."</a><br />";
if ($openID != 0){
if ($openID == $record['objekt_id']) // Let's party
$baum.= $this->getBaum($record['objekt_id'],$record['objekt_id'],$space." ",1);
if ($level == 1)
$baum.= $this->getBaum($record['objekt_id'],$record['objekt_id'],$space." ",1);
}
}
return $baum;
}
Er liest die Sachen aus einer Tabelle aus. Mutterobjekte haben die Mutterobjekt_id 0. Habe die Navigation aus performancegründen in einen Frame gepackt, deshalb auch das JS, falls ihr euch fragt.
Das Problem ist jetzt, dass er mir bei einem n-tiefen Level einfach aufhört, das komische ist aber, dass das in verschiedenen Levels passiert.
Was kann dafür der Grund sein?
Gruß
Alex
|
|
|
05.08.2003, 13:33
|
#2
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
wozu ist das gut?:
if ($level == 1)
$baum.= $this-> getBaum($record['objekt_id'],$record['objekt_id'],$space." ",1);
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
05.08.2003, 13:41
|
#3
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
PHP-Code:
if ($openID != 0){
if ($openID == $record['objekt_id']) // Let's party
$baum.= $this-> getBaum($record['objekt_id'],$record['objekt_id'],
$space." ",1);
if ($level == 1)
$baum.= $this-> getBaum($record['objekt_id'],$record['objekt_id'],
$space." ",1);
}
Hi Michael!
Das ist zum Öffnen einer Struktur (es soll nur ein Mutterobjekt immer n-tief angezeigt werden. Ich brauche auch 2 verschiedene Links: Das Muterobjekt braucht einen anderen Link als die Childobjekte.
|
|
|
05.08.2003, 13:59
|
#4
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
echt? ich dachte das machst du damit:
if ($level == 0) $baum.= $space."<a class=\"navi\" onClick=\"java script:zweiFrames(0,'navi.php?openID=".$record['objekt_id']."',1,'showobjekt.php?objekt_id=".$record['objekt_id']."');\" href=\"#\">".$record['name']."</a><br />";
else $baum.= $space."<a target=\"mainFrame\" class=\"navi\" href=\"showobjekt.php?objekt_id=".$record['objekt_id']."\">".$record['name']."</a><br />";
also: warum dann die gleiche rekursion zweimal durchfetzen?
ich vermute nämlich, dass du dir einen stack-overflow verursachts (geht mit reks relativ einfach  )
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
05.08.2003, 14:22
|
#5
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
Es war ein simpler Denkfehler:
Diese Abfrage
if ($openID != 0){
}
ist bei nicht nur bei Mutterobjekten war sondern auch bie solchen bei denen die ID mit einen Buchstaben beginnt.
Gerniere meine ID's mit md5(microtime())
Alex
|
|
|
05.08.2003, 14:25
|
#6
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Zitat:
Original geschrieben von holunda
Gerniere meine ID's mit md5(microtime())
|
Warum 
|
|
|
05.08.2003, 14:29
|
#7
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
 genau! warum, das hab ich mir auch gedacht.
und ich bin immer noch der meinung, dass du nur einmal einen Verweis auf die Rekursion benötigst.
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
05.08.2003, 16:27
|
#8
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
wollte kein auto_increment machen ... und durch dieses Verfahren ist die Wahrscheinlichkeit gering dass die ID 2mal kommt ...
|
|
|
05.08.2003, 16:34
|
#9
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|

is es das mit autoincrement nicht auch?
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
05.08.2003, 16:47
|
#10
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
ich sag jetzt gar nichts mehr 
|
|
|
05.08.2003, 16:56
|
#11
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
's is halt heiss heut... 
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
05.08.2003, 18:30
|
#12
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Ich weiss warum! 
MD5 sieht halt verdammt cool aus! 
|
|
|
06.08.2003, 13:36
|
#13
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
Zitat:
Original geschrieben von Stuck Mojo
Ich weiss warum! 
MD5 sieht halt verdammt cool aus!
|
wirkt so, als ob man Ahnung von der Mterie hätte  .
Hätte da noch eine Frage:
Mein System dürfte ja jetzt dann klar sein:
Habe Objekte. Jedes Objekt hat eine MutterID. Die oberste Stufe hat die ID 0.
Nun soll es durch eine rekursive Funktion möglich werden ganze Objekt Bäume zu kopieren. aber wie muss das aussehen? Ich muss quasi den alten Baum auslesen und dann wieder mit neuer Mutter ID eintragen, aber wie?
Meine Objekte Table:
Objekt_ID,Name,Mutter_ID,stream.
hoffe ihr wisst was ich meine
|
|
|
07.08.2003, 12:16
|
#14
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Also ich würd den Quell-Baum in ein assoziatives Array einlesen und dann an eine Funktion übergeben, die den Baum in die DB einspielt.
In dieser Funktion holst du dir einfach nach jedem Insert die ID und ordnest Sie den aktuellen "Ast" als neu ID zu. Wenn jetzt ein Kind von einem Element kommt, bekommst du die neue ID über eben vergebene ID heraus. Also du musst 2 Beziehungen herstellen. 1. zwischen dem Original (Mutter/Kind IDs) + 2. der evtl. neu entstandenen IDs.
...ich glaube ich würde es nicht verstehen, wenn ichs lesen würde  ... aber ich probiers trozdem.
Gruss
Jan
EDIT
und wenn du den Quatsch mit dem MD5 rauslassen würdest, könnte man das sogar noch in der DB mit den Augen gegenchecken 
|
|
|
07.08.2003, 12:51
|
#15
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
Zitat:
Original geschrieben von Stuck Mojo
EDIT
und wenn du den Quatsch mit dem MD5 rauslassen würdest, könnte man das sogar noch in der DB mit den Augen gegenchecken  [/b]
|
Gute/Schnelle Augen können das MIT md5 auch  
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 02:28 Uhr.
|
 |