Funker: include funktioniert mit PHP 5 nicht

Hallöchen Ihr da draußen!

Ich habe folgendes Problem seit dem PHP 4 auf PHP 5 geupadetet wurde.

In der Indexseite wird die Inhaltsbox normalerweise per include mit, je nach gewähltem Link, einer anderen PHP-Seite gefüllt. Er füllt Sie aber nicht mit den gewählten PHP's der Links, sondern lediglich immer mit der "else" Seite.

dafür verwenden ich folgendes:

  
<?php  
if(isset($menu_punkt))  
{  
include($menu_punkt.".php");  
}  
else  
{  
include("neuheiten.php");  
}  
?>

Mir fällt leider kein Lösungsansatz ein. Vielen Dank für Eure Hilfe vorab.
Die URL ist die Website um welche es geht.

  1. Mir fällt leider kein Lösungsansatz ein. Vielen Dank für Eure Hilfe vorab.
    Die URL ist die Website um welche es geht.

    $menu_punkt=$_REQUEST['$menu_punkt'];

    Oder besser, post oder get, je nachdem eben.

    1. Hi!

      $menu_punkt=$_REQUEST['$menu_punkt'];
      Oder besser, post oder get, je nachdem eben.

      Weder noch. Dieses Variablenumkopieren ist keine empfehlenswerte Lösung, nur um nachlässige Programmierung auszugleichen, die einem nun mit abgeschaltetem register_globals auf die Füße fällt. Besser ist es, die Einträge in $_POST und $_GET direkt zu verwenden. Das spart jeweils eine weitere Variable, die man immer zusätzlich im Auge behalten muss. Und es führt auch nicht zu solchen PHP-Kuriositäten wie:

      $foo = $_GET['foo'];
        if (isset($foo))
          ...

      "Wie jetzt, mit isset($foo) fragen, ob $foo existiert? Es wurde doch gerade eine Zeile weiter oben angelegt, also muss es rein logisch da sein." Dass dieses Konstrukt trotzdem "funktioniert" liegt daran, dass isset() auch existente Variablen mit dem Inhalt NULL als nicht-existent ansieht.

      Also lieber gleich:

      if (isset($_GET['foo']))
          ...

      Lo!

      1. Hi! Das spart jeweils eine weitere Variable, die man immer zusätzlich im Auge behalten muss.

        Wieso? Sind die begrenzt? ;-)
        Ich arbeite sehr ungerne mit den in $_Post oder get verbliebenen Variablen, deshalb kopiere ich sie mir. Was Dein Konstrukt angeht, da hast Du aber recht.

        1. Hallo,

          Ich arbeite sehr ungerne mit den in $_Post oder get verbliebenen Variablen

          warum? Beißen oder stinken die? Sind sie schädlich für die Haut?

          Mir geht es gerade umgekehrt: Ich sehe es als Vorteil, dass ich in den vordefinierten superglobalen Arrays alle Benutzereingaben ($_GET, $_POST, $_COOKIE) sowie alle Server-Interna ($_ENV, $_SERVER) übersichtlich beieinander habe.

          So long,
           Martin

          --
          F: Was ist schlimmer: Alzheimer oder Parkinson?
          A: Parkinson. Lieber mal ein Bier vergessen zu zahlen, als eins verschütten.
          1. Hallo,

            Ich arbeite sehr ungerne mit den in $_Post oder get verbliebenen Variablen

            warum? Beißen oder stinken die? Sind sie schädlich für die Haut?

            Stinken ;-)
            Nein, mir machen die Hochkommata ab und zu Probleme (um der Wahrheit die Ehre zu geben).

            1. hi,

              Nein, mir machen die Hochkommata ab und zu Probleme (um der Wahrheit die Ehre zu geben).

              Du hast die freie Wahl zwischen " und '.

              Ich sehe den grössten Nachteil im umkopieren darin, dass man im laufe der Script-Entwicklung vergessen kann, dass $_VarInt eine Benutzereingabe von $_GET['q'] ist und dem zufolge vergessen könnte, diese dann zu escapen, wenn man es in einem bestimmten Kontext verwenden möchte.

              Aber gut, jeder hat sein eigenes Kreuz zu tragen ;)

              mfg

              1. Hi!

                Ich sehe den grössten Nachteil im umkopieren darin, dass man im laufe der Script-Entwicklung vergessen kann, dass $_VarInt eine Benutzereingabe von $_GET['q'] ist und dem zufolge vergessen könnte, diese dann zu escapen, wenn man es in einem bestimmten Kontext verwenden möchte.

                Ein nicht beachteter Kontextwechsel ist nicht nur mit direkten Benutzereingaben mindestens ungünstig, sondern auch bei Werten, die aus vermeintlich sicherer Quelle kommen. Um es mal so zu sagen: dem Kontext ist es egal, woher seine Daten stammen, er (miss)interpretiert sie stets nach seinen Regeln.

                Wenn du dich nach der Datenquelle richtest, musst du stets den gesamten Verarbeitungsprozess beachten, und auf Lücken untersuchen. Das ist mit zunehmender Projektgröße unhandlich, auch weil man Teilstücke kapselt (Funktionen) und in beliebiger Kombination aufruft.

                Lo!

                1. hi,

                  Ein nicht beachteter Kontextwechsel ist nicht nur mit direkten Benutzereingaben mindestens ungünstig, sondern auch bei Werten, die aus vermeintlich sicherer Quelle kommen.

                  Ja, ich weiss ;)

                  Ich bezog mich hier nur auf den Kontext der Fragestellung -- Danke fürs abrunden.

                  mfg

  2. Hi!

    if(isset($menu_punkt))
    Mir fällt leider kein Lösungsansatz ein.

    Probier es zunächst mit den einfachsten Debugging-Schritten: Lass dir mit Kontrollausgaben die Inhalte von Variablen anzeigen und - besonders in deinem Fall - die Ergebnisse von Funktionen.

    var_dump($menu_punkt);
    var_dump(isset($menu_punkt));

    Durch solche Ausgaben kann man kontrollieren, ob die eigenen Vorstellungen mit der Realität übereinstimmen. Das ist Voraussetzung um zielgerichtet weitersuchen zu können.

    Lo!

  3. Hallo,

    Ich habe folgendes Problem seit dem PHP 4 auf PHP 5 geupadetet wurde.

    und möglicherweise ein halbes Jahrzehnt zu spät ein paar sicherheitsrelevante Einstellungen den Empfehlungen angepasst wurden.

    In der Indexseite wird die Inhaltsbox normalerweise per include mit, je nach gewähltem Link, einer anderen PHP-Seite gefüllt. Er füllt Sie aber nicht mit den gewählten PHP's der Links, sondern lediglich immer mit der "else" Seite.

    [code lang=php]
    <?php
    if(isset($menu_punkt))

    warum sollte es die Variable $menu_punkt geben und warum sollte sie einen Inhalt haben. Vermutlich stand vorher register_globals auf on und jetzt auf off. Das wäre gut so.

    Freundliche Grüße

    Vinzenz

  4. Vielen Dank für die Tipps!

    Habs nun so hinbekommen

      
    <?php  
    if(isset($_GET['menu_punkt']))  
    {  
    include($_GET['menu_punkt'].".php");  
    }  
    else  
    {  
    include("neuheiten.php");  
    }  
    ?>
    
    1. Hallo funker,

      <?php

      if(isset($_GET['menu_punkt']))
      {
      include($_GET['menu_punkt'].".php");
      }

        
      Mutig. Was machst du wenn jemand daherkommt und die Seite mit ?menu\_punkt=http://example.com/boesesscript an der URL aufruft? Wenn du Glück hast ist allow\_url\_include ausgeschaltet, andernfalls wird das u.U. schädliche Script geladen und auf deinem Server ausgeführt. Du musst \*unbedingt\* prüfen, ob das was in $\_GET['menu\_punkt'] drinsteht ein "sauberer" Wert ist. [Prüfe importierte Parameter. Traue niemandem.](http://php-faq.de/q-sicherheit-parameter.html)  
        
        
      Grüß,  
      Tobias
      
      1. Hallo

        <?php

        if(isset($_GET['menu_punkt']))
        {
        include($_GET['menu_punkt'].".php");
        }

        
        >   
        > Mutig. Was machst du wenn jemand daherkommt und die Seite mit ?menu\_punkt=http://example.com/boesesscript an der URL aufruft? Wenn du Glück hast ist allow\_url\_include ausgeschaltet, andernfalls wird das u.U. schädliche Script geladen und auf deinem Server ausgeführt. Du musst \*unbedingt\* prüfen, ob das was in $\_GET['menu\_punkt'] drinsteht ein "sauberer" Wert ist.  
          
        Ein sehr wichtiger Punkt, den du ansprichst. Am einfachsten wäre eine Prüfung gegen ein Array mit den erlaubten Werten und um den übergebenen Wert von der einzubindenden Datei unabhängig zu machen, kommt der String mit dem Pfad auch in das Array.  
          
        ~~~php
        $pfade = array(  
        'Menüpunkt 1'=>'/pfad/zur/datei1.php',  
        'Menüpunkt 2'=>'/pfad/zur/datei2.php'  
        );  
          
        if(isset($_GET['menu_punkt']) and array_key_exists($_GET['menu_punkt'],$pfade)) {  
        include($pfade[$_GET['menu_punkt']]);  
        }
        

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        Veranstaltungsdatenbank Vdb 0.3