PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP wie HTML Iframe?


Blue7
12.10.2005, 20:46:29
Dumme Frage, gibt es im PHP auch eine Art Iframe?

Bsp: Habe Tabelle 2 Spaltig. 1 TD Menü rechts 2. TD

Kann man irgendwie andere PHP Seiten im 2. TD ala Iframe ausgeben kann.
Iframe funktioniert ja nicht mit der Variablen höhe/breite. Iframe gibt ja standartmässig bei %-Wert eine bestimmte höhe aus und dass sollte es ja nicht.

Gibts die Möglichkeit?

xabbuh
12.10.2005, 21:57:38
Ist require() (http://www.php.net/require)/include() (http://www.php.net/include) vielleicht das, was du suchst?

Matt
12.10.2005, 22:55:09
ähm nunja.. nimm es mir nicht krumm, aber ich glaube, du verstehst deine frage nicht.

Php ist so eine art programmiersprache - das heißt man kann damit auch teile, die wo anders vorkommen einfach in das aktuelle skript einbinden - da braucht man keine iframes.

mit dem befehl

require("page.php");

fügst du den code von page.php an der stelle an der dieser befehl steht in dein Script ein, worauf das was dort ausgegeben werden würde, an der stelle des requires ausgegeben wird.
Allerdings musst du natürlich darauf achten, dass der dadurch erzeugte html quellcode in ordnung ist.

wenn du eine datei website.php hättest:

<html><head><title>website.php</title></head>
<body>
Hallo. Hier ist mein script.
hier kommt jetzt das andere script:
<?php
require("script.php");
?>
</body></html>


und eine folgendermaßen aussehende script.php hättest:


<html><head><title>Script.php</title></head>
<body>
Hallo. Ich bin script.php. Ich zähle jetzt von 1 bis 10!
<?php
for($i=1; i<=10; i++)
{ print $i; }
?>
</body></html>



dann würde das resultat des aufrufs von website.php folgenden quellcode erzeugen:


<html><head><title>website.php</title></head>
<body>
Hallo. Hier ist mein script.
hier kommt jetzt das andere script:
<html><head><title>Script.php</title></head>
<body>
Hallo. Ich bin script.php. Ich zähle jetzt von 1 bis 10!
12345678910
</body></html>
</body></html>


Der grund: Der inhalt von script.php wurde in die mitte der website.php eingefügt. Da du in script.php html code hast, wird dieser mit eingefügt.

Blue7
13.10.2005, 19:21:53
Ähm naja include ist klar, ist ja eine fixe angabe wo das "Template" bzw. die andere Seite angzeigt werden soll.

ich wollte es aber variable, dass ich per Menü sage welche Seite an der Stelle ausgegeben werdenn soll.

xabbuh
13.10.2005, 19:59:51
Kein Problem. Per URL übergibst du einen entsprechenden Parameter und bindest dann die entsprechende Seite ein:

<?php
if(array_key_exists('content', $_GET)) {
switch($_GET['content']) {
case 'links':
include('links.php');
break;
case 'guestbook':
include('guestbook.php');
break;
}
?>

Blue7
15.10.2005, 12:57:02
okay danke!

Serp
16.10.2005, 04:16:45
Ähm, xabbuh, machst du das echt so, mit switch und allem drum und dran? Was is bei größeren Projekten? Würdest du da auch n switch mit sagen wir mal 100 Zweigen bauen? Is doch n Wahnsinnsaufwand...

Sicher, der Hintergrund is die Sicherheit. Aber ich denk, die sollte so auch gegeben sein:

<?php
if(array_key_exists('content', $_GET)) {
$_GET['content'] = str_replace('../', '', $_GET['content']);
if(file_exists('./content/'.$_GET['content'].'.php') include('./content/'.$_GET['content'].'.php');
else include('error.php');
}
?>

Der Versuch, externe Sachen einzubinden, wird dadurch zunichte gemacht, dass die ganzen Dateien im Ordner content liegen müssen. Und der Versuch, mit Hilfe von ../ aus diesem Ordner rauszukommen, wird durch das str_replace verhindert - dann erscheint halt die Fehlerseite.
Müsste eigentlich alles abgedeckt sein, oder hab ich noch was übersehen?

xabbuh
16.10.2005, 11:24:45
Ähm, xabbuh, machst du das echt so, mit switch und allem drum und dran? Was is bei größeren Projekten? Würdest du da auch n switch mit sagen wir mal 100 Zweigen bauen? Is doch n Wahnsinnsaufwand...
Da würde ich es eher so machen, dass ich Seitenanfang und Seitenende in extra Dateien auslagere und auf jeder Unterseite einbinde. So spart man sich die vielen Abfragen.

Der Versuch, externe Sachen einzubinden, wird dadurch zunichte gemacht, dass die ganzen Dateien im Ordner content liegen müssen. Und der Versuch, mit Hilfe von ../ aus diesem Ordner rauszukommen, wird durch das str_replace verhindert - dann erscheint halt die Fehlerseite.
Müsste eigentlich alles abgedeckt sein, oder hab ich noch was übersehen?
Hier müsste basename($_GET['content']) eigentlich auch ausreciehn oder vertue ich mich da?

Matt
16.10.2005, 19:47:32
Nunja, ich denke, dass es in großen Projekten ganz anders wäre. Da würde man das design auslagern - nicht den inhalt. Da wäre "Hauptseite" (also index.php) nicht das template sondern die verwaltung der Inhalte, wärend das template über irgend ein framework geholt werden würde.

Serp
18.10.2005, 02:21:09
Hier müsste basename($_GET['content']) eigentlich auch ausreciehn oder vertue ich mich da?

Hm... Ich muss zugeben, wieder mal ne Funktion, die mir neu is... ;)

Aber es is nicht ganz das Gleiche: Bei meiner Variante kann ich innerhalb von content immer noch weitere Unterordner haben, mit basename() geht das nicht.

xabbuh
18.10.2005, 14:06:50
Aber es is nicht ganz das Gleiche: Bei meiner Variante kann ich innerhalb von content immer noch weitere Unterordner haben, mit basename() geht das nicht.
Okay, stimmt auch wieder.