Mfrank: include (Variablen) ?

Hallo

habe mich ohne grosse php-Kenntnisse mal an eine reine php-seite gesetzt, nach dem Motto "learning by doing" ;-)

Jetzt stehe ich aber vor einem Problem und komme einfach nicht weiter :(
Ich versuche mal meine kranken Hirnwindungen deutlich zu machen... also:

Die Startseite ist eine einfache zweispaltige Tabelle, deren Felder ich mit includes fülle (ein "navigation-include" und ein "main-include").
Bei Seitenaufruf wird diese dann auch brav angezeigt (links die Navigation und rechts der "Begrüssungstext").
Wenn ich jetzt jedoch in der Navigation z.B. auf "guestbook" klicke, will ich dieses ja auch im "main-include" angezeigt bekommen... nur wie ?

Auf der Startseite habe ich das "main-inlude" durch eine Variable ersetzt, also:
$main = 'start.html';
include ("$main");

mein Guestbook-link sieht so aus:
<a href='index.php?main=guestbook.php' target=_self>

Müsste bei Klick die Seite nicht komplett neu geladen werden, mit $main=guestbook.php ?

Habe ich einen eklatanten Fehler begangen ? Geht das überhaupt so wie ich mir das vorgestellt habe ?
Bitte helft mir !!
Wie gesagt: "..ohne grosse php-Kenntnisse.." (eigentl. KEINE), weswegen ein kommentierter "Lösungs-Quelltext" mir am liebsten wäre *g*

Danke für eure Hilfe im Voraus !!!
Frank

  1. Hallo Frank,
    was passiert bei dir denn?

    Ich könnte mir folgenden Fehler vorstellen:
    $main wird immer auf start.html gesetzt.
    D.h. die Variable $main die du in der URI übergeben hast wrd überschrieben. Es lädt also ständig nur die Startseite.

    Vorschlag:
    if(!isset($main))   //Kenne Variable $main nicht->Startseite laden
      $main = "start.html";  //Starzseite laden

    Ersetze $main = 'start.html'; durch obigen Quelltext. Dann einfach das include dadrunter.
    isset() überprüft ob es die Variable gibt. Denn wenn der User das erste mal auf die Seite kommt gibt es ja kein ?main=start.html.
    In diesem Fall setzt das Script $main auf "start.html". Die Startseite wird geladen.
    Bei dir passiert das aber IMMER. Hier nicht. Denn wenn die Variable gesetzt ist wird sie nicht überschrieben.

    Ich hoffe ich hab dein Problem erkannt und konnte es lösen!

    Henning

    1. Hallo Henning

      ...es funktioniert !!!!!!! Danke !!!!

      Frank

    2. Moin,

      Vorschlag:
      if(!isset($main))   //Kenne Variable $main nicht->Startseite laden
        $main = "start.html";  //Starzseite laden

      Auf keinen Fall so machen!

      Da könnte jetzt nämlich jemand irgendwas in $main eintragen und das würde dann geladen, ggbf. kann man damit sogar Code von einem anderen Computer laden und auf deinem Server ausführen.

      Mach lieber ein Array o.ä. und setzt daraus die Namen, du brauchst dann bei den Links nur eine Nummer angeben.

      $seiten = Array("start.html", "seite1.html", "seite2.html"); // usw.
      if($seite < 0 || $seite >= count($seiten)) $seite=0;
      include($seiten[$seite]);

      Deine Links haben dann die Form index.php?seite=0 für start.html, mit 1 für seite1.html usw.

      --
      Henryk Plötz
      Grüße aus Berlin

      1. Hallo,

        Vorschlag:
        if(!isset($main))   //Kenne Variable $main nicht->Startseite laden
          $main = "start.html";  //Starzseite laden

        Auf keinen Fall so machen!

        Da könnte jetzt nämlich jemand irgendwas in $main eintragen und das würde dann geladen, ggbf. kann man damit sogar Code von einem anderen Computer laden und auf deinem Server ausführen.

        Danke für dieses Posting! Daran hab ich bisher eigentlich nie gedacht, ist aber wirklich nicht ohne. Muss ich mir merken

        small

  2. Müsste bei Klick die Seite nicht komplett neu geladen werden, mit $main=guestbook.php ?

    hm... nicht dass meine php-erfahrungen sonderlich weitreichend wären, aber hast du mal geprüft ob folgendes in deiner php.ini (windows root) eingetragen ist?

    register_globals = On

    falls dort off steht ist das auch nicht weiter wild, sogar besser (jedenfalls laut den meinungen die ich bisher eingeholt habe ;-)

    auf die variable $main greifst du dann folgendermaßen zu:

    $main = $_GET['main'];

    jedenfalls wenn du php 4.irgendwas installiert hast, ansonsten $main = $HTTP_GET_VARS['main'] wenn ich mich nicht irre.