Probleme mit dynamischem Menü

alexXP

Grünschnabel
bekomm immer diese Fehlermeldung:
Notice: Undefined variable: PHP_SELF in D:\hp\PHP - erste page\menu\menu3.php

Hab schon in google nachgeschaut, aber die scripts die ich finde sehen alle etwa so aus:

Hier der code:
PHP:
<?
$siteRoot="/";
$menuStruct=array(
"Home"=>array("root"=>$siteRoot."index.php"),
"Über uns"=>array("root"=>$siteRoot."ueberuns.php", "Firma"=>$siteRoot."firma.php", "Beteiligungen"=>$siteRoot."beteiligungen.php"),
"Allgemein"=>array("root"=>$siteRoot."allgemein.php", "Irgendwas"=>$siteRoot."irgendwas.php", "Noch mehr"=>$siteRoot."nochmehr.php")
);
if($PHP_SELF == $menuStruct['Home']['root']){
  foreach($menuStruct as $key=>$value){
    echo "<b><a href=".$value['root'].">$key</a></b><br>";
  }
} else {
  foreach($menuStruct as $key=>$value){
    echo "<b><a href=".$value['root'].">$key</a></b><br>";
    foreach($value as $key2=>$value2){
      if(array_search($PHP_SELF,$value)){
        if($key2 != "root")
          echo " <font size=\"-1\"><a href=".$value2.">$key2</a></font><br>";
      }
    }
  }
}
?>

Danke schon mal

Mfg alex
 
Zuletzt bearbeitet:
Hallo,
dein Hoster hat php_safe an.
Darum solltest du lieber $_GET,$_POST,$_SERVER usw verwenden.
Für $PHP_SELF solltest du also $_SERVER['PHP_SELF'] verwenden.
bye
 
Zuletzt bearbeitet:
php_safe?
Du meinst wohl eher register_globals = off. Oder ist das dasselbe?! ;-)
Ansonsten stimmt aber DrachenKaisers Rat.
 
Moin Leutz,

wenn ich das richtig sehe, kommt das "Original" von dewi ( http://www.nak-webmaster.de ) und schaut so aus:

PHP:
<?
/*
die Variable $siteRoot muss angepasst werden, wenn die Dateien in einem Unterverzeichnis abgelegt werden.
Wenn das Unterverzeichnis z.B. "DIR" heißt, dann muss $siteRoot="/DIR/"; sein
*/

$siteRoot="/";
$menuStruct=array(
"Home"=>array("root"=>$siteRoot."index.php"),
"Über uns"=>array("root"=>$siteRoot."ueberuns.php", "Firma"=>$siteRoot."firma.php", "Beteiligungen"=>$siteRoot."beteiligungen.php"),
"Allgemein"=>array("root"=>$siteRoot."allgemein.php", "Irgendwas"=>$siteRoot."irgendwas.php", "Noch mehr"=>$siteRoot."nochmehr.php")
);


if($PHP_SELF == $menuStruct[0]['root']){
  foreach($menuStruct as $key=>$value){
    if($PHP_SELF == $value['root']){
       echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
    }
    else{
       echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
    }
  }
}
else{
  foreach($menuStruct as $key=>$value){
    if($PHP_SELF == $value['root']){
       echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
    }
    else{
       echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
    }
    foreach($value as $key2=>$value2){
      if(array_search($PHP_SELF,$value)){
        if($key2 != "root")
           if($PHP_SELF == $value2){
              echo "<div class=\"secLevelActive\"><a href=".$value2.">$key2</a></div>\n";
           }
           else{
              echo "<div class=\"secLevel\"><a href=".$value2.">$key2</a></div>\n";
           }
      }
    }
  }
}
?>

Das Ergebnis ist hier zu betrachten.
Ich finde das Script gerade wegen seiner Kürze ziemlich genial. Habe da aber auch ein paar Fragen zu:

1. Bei den Menüeinträgen mit Untermenü möchte ich nun auf eine eigene Seite für den Menüeintrag verzichten und direkt den ersten Untermenüeintrag öffnen. Das klappt auch soweit => Menüeintrag und Untermenüeintrag werden nicht als Link generiert. Leider nur beim ersten Untermenüeintrag. Hätte dieses aber auch ganz gerne bei den weiteren Untermenüeinträgen, dass der Menüeintrag nicht als Link dargestellt wird. Wie geht das?

2. Habe ein wenig am Script herumprobiert und bin auf folgendes gestossen: Wenn ich die erste IF-Abfrage einfach weglasse und direkt mit deren ELSE fortfahre, also:

PHP:
foreach($menuStruct as $key=>$value){
  if($PHP_SELF == $value['root']){
     echo "<div class=\"fstLevelActive\"><a href=".$value['root'].">$key</a></div>\n";
  }
  else{
     echo "<div class=\"fstLevel\"><a href=".$value['root'].">$key</a></div>\n";
  }
  foreach($value as $key2=>$value2){
    if(array_search($PHP_SELF,$value)){
      if($key2 != "root")
         if($PHP_SELF == $value2){
            echo "<div class=\"secLevelActive\"><a href=".$value2.">$key2</a></div>\n";
         }else{
            echo "<div class=\"secLevel\"><a href=".$value2.">$key2</a></div>\n";
         }
    }
  }
}
...scheint es auch ohne Probleme zu funktionieren!? Wieso?

MfG
Mc Fly
 
Zurück