php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.04.2008, 16:22  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard Bekomme rekursiv programmierung nicht hin!

Hallo Forum ich bin seid heute neu hier!

Ich habe ein Problem ich will ein Skript schreiben wo die Kategorien wie ein Baum in die Tabelle geschrieben werden. Dabei haben die absoluten Hauptkategorien die parent_id 0. Alle anderen die dazu kommen haben dan als parent_id die id der kategorie.

id name parent_id
1 tiere 0
2 autos 0
3 affen 1
4 loewen 1
5 ferarie 2
6 porsche 2

Und so weiter eben ausbaubar. Habe schon über nested sets gelesen aber das rappel ich nicht. Nun will ich das rekursiv machen aber bekomme es einfach nicht hin. Vieleicht kann mir jemand helfen!

Hier mein Code
PHP-Code:
<?php 
navimenu 
(0); 

function 
navimenu($cat){ 
     
    
$sqlbefehl ="Select id,name,parent_id,level where parent_id='".$cat."'"
    
$ergebnis mysql_query($sqlbefehl)or die(mysql_error()); 
    
$num mysql_num_rows($ergebnis); 

    
// Rekursionsabruch, okay kann man auch if($!num) nehmen, weiß gerade net 
   // was num_rows alles wirklich zurückgeben kann 
    
if($num<1){ 
      echo 
$row['name']; 
    }else{ 
         while(
$row mysql_fetch_array()) 
         {  
             
$tmp $row['name']."+".navimenu($row['id']); 
              
$tmp $tmp."|"
               
        echo 
$sqlbefehl
         } 
    } 

?>
Das komische er bringt gleich zu Beginn diese Fehlermeldung!

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where parent_id='0'' at line 1

Dake für eure Hilfe mfg der Litter
litterauspirna ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.04.2008, 22:10  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

SELECT x,y,z FROM tabellenname WHERE i=2
Du hast vergessen, die Tabelle anzugeben.
Und für nested sets gibt es fertige Klassen, zum Beispiel PEAR :: Package :: DB_NestedSet2
David ist offline  
Alt 24.04.2008, 22:23  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ja das mit der Tabelle habe ich vergessen und schon behoben!

Der Code schaut jetzt insgesamt anders aus aber nun geht gar nichts mehr ich sehe nur einen weisen Bildschirm!

PHP-Code:
<?php
function navimenu($tab_baum,$cat){
 
    
$sqlbefehl ="Select id,name,parent_id,level From $tab_baum where parent_id='".$cat."'";
    
$ergebnis mysql_query($sqlbefehl)or die(mysql_error());
         while(
$row mysql_fetch_array()){
    echo 
$row['name']."<br>"
             
navimenu($cat.$row['id']);
  
//echo $sqlbefehl;
         
}
}
?>
HAbe mich schon belesen über nested sets und das rappel ich gar nicht. Darum will ich erst mal das rekursive verstehen und umsetzen
litterauspirna ist offline  
Alt 24.04.2008, 22:26  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Bitte nocheinmal versuchen mit
PHP-Code:
function navimenu($tab_baum,$cat) {
  
$sqlbefehl ="Select id,name,parent_id,level From $tab_baum where parent_id='".$cat."'";
  
$ergebnis mysql_query($sqlbefehl) or die(mysql_error());
  if (
mysql_num_rows($ergebnis)==0) {
    echo 
'-- kein Eregebnis für ' $sqlbefehl "<br />\n";
  }
  else {
    while(
$row mysql_fetch_array()) {
      echo 
' ~ ' $row['name'] . "<br />\n";
      
navimenu($cat.$row['id']);
    }
  }

David ist offline  
Alt 24.04.2008, 22:33  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Leider immer noch das gleiche Ergebnis ein weiser Bildschirm ohne irgendwas!
litterauspirna ist offline  
Alt 24.04.2008, 22:35  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Dann hast Du an anderer Stelle einen parse error eingebaut oder die Funktion wird nicht aufgerufen.
David ist offline  
Alt 24.04.2008, 22:38  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Woran kann das aber liegen das diese Funktion nicht aufgerufen wird? Das macht mich irre!
litterauspirna ist offline  
Alt 25.04.2008, 08:06  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von litterauspirna Beitrag anzeigen
HAbe mich schon belesen über nested sets und das rappel ich gar nicht. Darum will ich erst mal das rekursive verstehen und umsetzen
Rekursive Datenbankzugriffe sollte man aus performancegründen eigentlich vermeiden. Andereseits bei so wenig Daten, wie es ein Menu normalerweise beinhaltet, spielt das sicher keine Rolle.
Was ich in deinem Beispiel nicht verstehe ist
PHP-Code:
navimenu($cat.$row['id']); 
Ich denke, das müsste doch ein Komma sein, da die Funktion zwei Parameter erwartet.
Hier einach mal ein Beispiel, wie ich es andernorts schon gebraucht habe:
PHP-Code:
function show_menu($pid$level){
    
$sql "SELECT
                name,
                id
            FROM
                tab2
            WHERE
                pid = $pid"
;
    
$res mysql_query($sql) or die(mysql_error());
    while (
$obj mysql_fetch_object($res)){
        echo 
str_repeat('-'$level 4) . "$obj->name<br />";
        
show_menu($obj->id$level 1);
    }
}

show_menu(00); 
__________________
Gruss
L
lazydog ist offline  
Alt 25.04.2008, 15:15  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Vielen Dank aber auch mit diesem Code habe ich keinen Erfolg:

Habe da schon die Variablen auf global gesetzt aber funktioniert nicht!

Die Fehlermeldung kommt hier
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE parent_id =' at line 7


PHP-Code:
<?php
function show_menu($pid$level){
global 
$pid;
global 
$level;
    
$sql "SELECT
    id,
                name,
                parent_id
            FROM
                $tab_baum
            WHERE
                parent_id = $pid"
;
    
$res mysql_query($sql) or die(mysql_error());
    while (
$obj mysql_fetch_object($res)){
        echo 
str_repeat('-'$level 4) . "$obj->name<br />";
        
show_menu($obj->id$level 1);
    }
}
show_menu(00); 
?>
litterauspirna ist offline  
Alt 25.04.2008, 15:24  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

PHP-Code:
$res mysql_query($sql) or die(mysql_error().'<pre>'.$sql.'</pre>'); 
Ich wette, es fehlt der Name der Tabelle, da $tab_baum in der Funktion nicht definiert ist.
David ist offline  
 


Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Biete: PHP/MYSQL/AJax/Javascript Programmierung PhilipW Beitragsarchiv 8 22.04.2009 15:00
Kurze Einführung in Firefox Search Plugin Programmierung PTC Tutorials 5 10.02.2009 01:31
[Erledigt] Aktuellstes Datum von Dateien rekursiv ermitteln marcus_78 PHP Tipps 2008 11 24.06.2008 09:37
PHP: mkdir rekursiv Zergling-new Tutorials 1 13.08.2007 04:32
FTP: Ordner rekursiv Duplizieren PHP Tipps 2007 11 30.01.2007 10:02
PHP Socket Programmierung Broadcast PHP-Fortgeschrittene 19 01.05.2006 21:15
Pascalsches Dreieck rekursiv PHP Tipps 2006 6 16.03.2006 14:43
Denkfehler? Objektorientierte Programmierung... PHP Tipps 2007 17 23.11.2005 22:06
Array rekursiv bauen? Anotherone PHP Tipps 2007 4 04.11.2005 14:43
[Erledigt] Wer hilft mir bei der Programmierung (PHP) Off-Topic Diskussionen 3 15.11.2004 09:20
[Erledigt] Wer hat das Urheberrecht auf die Programmierung ? Off-Topic Diskussionen 17 27.10.2004 14:30
rekursiv durch MySQL mit PHP? PHP Tipps 2004 2 18.07.2004 18:47
Programmierung eines WebCalenders für ein Intranet PHP Tipps 2004 2 17.06.2004 11:22

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php rekursives menü, rekursive programmierung php, rekursiv php mysql, rekursive programmierung anfänger

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum