Philipp: Navigation mit PHP/include

Hallo,

ich habe bereits bei Google geguckt und auch im SELFHTML-Archiv aber nicht so recht das gefunden, was ich gesucht habe.

Ich habe ein Design, bei welchem der Inhalt eingebettet ist. Deshalb muss ich meine Links nach dem Schema "<a href="index.php?site=home.php">Home</a>" schreiben.

Es funktioniert auch, Problem ist aber der erste Aufruf.

Wenn man das erste Mal auf meine Seite kommt, wird noch kein Inhalt angezeigt. Wie stelle ich das jetzt an, dass beim ersten Aufruf erst einmal home.php als Inhalt angezeigt wird?
Gewiss, ich könnte einfach die Variable $site vorher auf home.php stellen.
Wenn der User dann aber die Seite aktualisiert, kommt er wieder zum Anfang.

Hat jemand Lösungsvorschläge?

Danke!

MfG

  1. Hi,

    Ich habe ein Design, bei welchem der Inhalt eingebettet ist. Deshalb muss ich meine Links nach dem Schema "<a href="index.php?site=home.php">Home</a>" schreiben.

    nein, musst Du nicht. Die Serverkonfiguration und PATH_INFO sind Deine Freunde. Insbesondere muss dieses ".php" nicht sein, schließlich lieferst Du doch HTML aus, oder?

    Wenn man das erste Mal auf meine Seite kommt, wird noch kein Inhalt angezeigt. Wie stelle ich das jetzt an, dass beim ersten Aufruf erst einmal home.php als Inhalt angezeigt wird?

    "if" ist Dir bekannt?

    Wenn der User dann aber die Seite aktualisiert, kommt er wieder zum Anfang.

    Wieso das?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo Philipp,

    Ich habe ein Design, bei welchem der Inhalt eingebettet ist. Deshalb muss ich meine Links nach dem Schema "<a href="index.php?site=home.php">Home</a>" schreiben.

    bindest du die home.php mit include($site) (bzw. $_GET['site']) ein? Und ohne zu überprüfen was in $_GET['site'] drinsteht? Dann handelst du dir ein verdammt großes Sicherheitsloch ein - _unbedingt_ überprüfen, was in $_GET['site'] drinsteht - sonst kommt einer daher und ruft dein Script über index.php?site=http://example.com/beoessesscript.txt auf und schon hast du den Salat.
    Im Übrigen sind Konstruktionen wie index.php?site=irgendwas nicht sehr schön - wie man das verhindert (ohne die php-Datei zu ändern) steht im </archiv/> z.B. in </archiv/2003/7/53813/#m298552>.

    Wenn man das erste Mal auf meine Seite kommt, wird noch kein Inhalt angezeigt. Wie stelle ich das jetzt an, dass beim ersten Aufruf erst einmal home.php als Inhalt angezeigt wird?

    du suchst die Funktion empty()

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. bindest du die home.php mit include($site) (bzw. $_GET['site']) ein? Und ohne zu überprüfen was in $_GET['site'] drinsteht? Dann handelst du dir ein verdammt großes Sicherheitsloch ein - _unbedingt_ überprüfen, was in $_GET['site'] drinsteht - sonst kommt einer daher und ruft dein Script über index.php?site=http://example.com/beoessesscript.txt auf und schon hast du den Salat.

      Was könnte ich dagegen tun?

      1. Hallo Philipp,

        sonst kommt einer daher und ruft dein Script über index.php?site=http://example.com/beoessesscript.txt auf und schon hast du den Salat.
        Was könnte ich dagegen tun?

        indem du prüfst, ob in $_GET['site'] irgendwas mit "http://" drinsteht, oder du machst dir ein Array mit erlaubten Werten für $_GET['site'] und schaust dann nach, ob der übergebene Wert im Array steht (mit in_array()) - wenn ja, führst du dein include() aus, wenn nicht bindest du die Standardseite (home.php) ein.

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Und wenn ich das ganze mit $PHP_SELF laufen lassen, z.B.  $PHP-SELF?site=home.php?
          Wäre doch auch eine Möglichkeit?

          1. Hallo Philipp,

            Und wenn ich das ganze mit $PHP_SELF laufen lassen,

            wenn register_globals auf off steht brauchst du $_SERVER['PHP_SELF']

            z.B.  $PHP-SELF?site=home.php?
            Wäre doch auch eine Möglichkeit?

            Ich weiß zwar nicht, was du mit php_self genau vorhast, aber das ändert nichts an dem Problem - einbinden tust du die datei home.php ja trotzdem.

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
            1. Ich weiß zwar nicht, was du mit php_self genau vorhast, aber das ändert nichts an dem Problem - einbinden tust du die datei home.php ja trotzdem.

              Sorry, hab da was verdreht. Hab mir folgendes ausgedacht:
                  <?php
                   include("config.php");
                   if(empty($site))
                   {
                    include("home.php");
                   }
                   else
                   {
                    if(file_exists("$site$file_php"))
                    {
                     include("$url_root$site$file_php");
                    }
                    else
                    {
                     echo "Fehler 404";
                    }
                   }
                 ?>
              Im Klartext: Er hängt einfach den Pfad davor. Damit können nur Files von meinem wwwroot geöffnet werden.
              Wird aber noch verbessert, am im groben funktioniert es.

              1. Hallo Philipp,

                if(empty($site))

                *grmpf* ich habe 5mal $_GET['site'] geschrieben - und du schreibst immernoch $site...

                if(file_exists("$site$file_php"))
                       include("$url_root$site$file_php");

                ich weiß zwar nicht, was in $file_php bzw. in $url_root drinsteht, aber es könnte so funktionieren

                echo "Fehler 404";

                das halte ich für keine allzugute Lösung - binde einfach die home.php ein.

                Im Klartext: Er hängt einfach den Pfad davor. Damit können nur Files von meinem wwwroot geöffnet werden.

                sags doch gleich :-)

                Grüße aus Nürnberg
                Tobias

                --
                Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  3. Hi!

    Wenn der User dann aber die Seite aktualisiert, kommt er wieder zum Anfang.

    nein, tut er nicht, da die Parameter ebenfalls mitgesendet werden.

    Grüße
    Andreas