PHP Include Funktion bei CSS-Basiertem Layout

A

Aexcel

Gast
Hallo,

ich habe ein Problem mit der Include Funktion von PHP:

Habe bei meiner Homepage mehrere DIVs angelegt:

#top für die Headergrafik
#left für das Menü
#main für den Inhalt

Nun habe ich 2 verschiedene Include Funktionen in der index.php

für #main:

PHP:
<div id="main">
<?php
if ($_GET[seite] == "") {
$_GET[seite] = "home.html";
}
include $_GET[seite];
?>
</div>

und für Links (das Menü besteht noch;) aus reinem HTML deshalb):

PHP:
<div id="left">
<?php
if ($_GET[seite2] == "") {
$_GET[seite2] = "links.html";
}
include $_GET[seite2];
?>

</div>

nun möchte ich über das Menü den Inhalt des #main Div ändern. Das klappt mit reinem html Seiten auch (index.php?seite=test.html).
Allerdings wenn ich einen PHP Seite (Gästebuch, Fotogalerie etc...) verlinke bleibt das #main Div leer (index.php?seite=gaestebuch.php).
Mache ich den Umweg über ein iFrame funktionierten auch die PHP Seiten.

Das störrt mich aber, weil dadurch die Barrierefreiheit aufhoben wird. Diese brauche ich aber für die Lightbox.

Ich kenne mich mit PHP leider nicht gut aus.
Wo könnte der Fehler liegen?


Schonmal Danke!

Aexcel
 
Die inkludierten Seiten mit .html sind wahrscheinlich lokal bei Dir auf dem Rechner vorhanden, können eingebunden werden, die anderen Seiten sind wahrscheinlich einfach nur Links zu vorhandenen Scripten (Gästebuch usw), also eine Adresse mit "http://", diese kann man nicht auf diese Weise einbauen und deshalb bleibt das DIV dann leer.

Abgesehen davon ist es gefährlich einfach Daten in seine Seite per GET zu inkludieren ohne diese vorher zu prüfen.
 
Gib doch mal mit
PHP:
echo $_GET['seite2'];
aus was da steht wenn die Seite leer ist. Selbst wenn es auf Deinem Webspace kann es ja noch im falschen Ordner sein etc.
Beim includieren müsste dann auch eigentlich ein Fehler ausgegeben werden wenn es in der php.ini so eingestellt ist, ansonsten steht der Fehler im error_log von PHP.
 
Vielleicht funktioniert das aus Sicherheitsgründen welche in der php.ini hinterlegt sind nicht.
Das kann ich mir gut vorstellen weil so lässt sich ja jede x beliebige PHP Datei auf dem Server ausführen.

Ich würde es so machen, dass ich zuerst die IF Abfrage einbinden tu. Und direkt noch in der Bedingungen fest den Include Befehl reinschreibe.

Also etwa so:

if ($_GET[seite] == "home") {
include "home.php";
} else{
//etc.
}
 
syntec schrieb:
aus was da steht wenn die Seite leer ist.

du meinst wohl seite? seite2 sind ja nur das Link Menü.

Für seite: Genau der Link von der Galerie.

Ich habe für die Galerie eine Subdomain eingerichtet. Der Galerieordner befindet sich auf der gleichen Ebene wie der Ordner der eigentlichen Homepage.


@[funcoder]

wo finde ich die PHP.ini auf dem Server?

Hab das erste mal in meinem Leben mit PHP zutun :rolleyes:
 
index
Code:
section = array();
section['default'] = "default.html";
setction['seite1'] = "seite1.html";
section['seite2'] = "seite2.html";

main div
Code:
<?php
if (isset($_GET['section'], $section[$_GET['section']])) {    
include $section[$_GET['section']];
} else {    
include $section['default'];
}?>

index.php?section=seite1
index.php?section=seite2
 
Code:
section = array();
section['default'] = "default.html";
setction['seite1'] = "seite1.html";
section['seite2'] = "seite2.html";

welche HTML Seiten muss ich da reinschreiben?
Alle die im #main DIV angezeigt werden sollen?
Dein Code is ja nur ein Beispiel?


Danke! :)
 
ja korrekt.
beim aufruf der seite wird das array "geladen", direkt zu begin der index datei.
dann wird weiter geladen und landet im div.
im div steht dann die if schleife, welche die daten aus dem array holt und mit der in der url eingegeben section abgleicht.
dann sieht er, aha section=seite1 und schaut ins array section, wo dann natuerlich der verweis auf seite1.html steht :P
und denn wird inkludiert. ende :D
 
Zuletzt bearbeitet:
wenn ich jetzt die include funktion von #main gegen deinen Code austausche, läd der Browser die Seite überhaupt nicht mehr - alles bleibt weiß :(
 
Hab mich nochmal informiert. Und zwar ist es so dass das nur ein fester Dateipfad includiert werden darf.
Eben aus Sicherheitsgründen.
Daher:
if ($_GET[seite] == "home") {
include "home.php";
} else{
//etc.
}

wo finde ich die PHP.ini auf dem Server?
Die Datei findest du am Server unter "apache\bin\php.ini"
Allerdings hängt es davon ab ob du nur einen Webspace hast oder volle Rechte auf einem eigenen Server besitzt.

Besitzt du nur einen Webspace dann kannst du die PHP.ini nicht verändern.
Besitzt du einen dedizierten/virtuellen Server dann funktioniert es.
 
Ich find das ganze irgendwie total unsicher. Da kann man ja per adressszeile jede x-beliebige sache includen lassen? oder seh ich datt grad falsch
 
Ja es war auf höhstem Niveau unsicher. Das wurde vorhin auch schon gesagt.
Jedoch so nicht mehr, wie es oben steht:
PHP:
if ($_GET["seite"] == "home") {
include "home.php";
}
 
ich weiss ja nich was ihr hier für sicherheitsexperten seit aber man kann ganz sicher nich jedes x belibiege includieren mit meiner funktion. versucht man x belibiegs zu includieren erwartet einen die default.html.

Code:
include $section[$_GET['section']];
} else {    
include $section['default'];

default = default.html also pf
 
Ich versteh das Problem, bzw. den Beitrag nicht.

PHP:
$_GET["Site"] = "phpinfo.php";  #Als Beispiel

#SELBSTMORD
include($_GET["Site"]);

#SICHERE WHITE-LIST
if(isset($_GET["Site"]))
$get_site = addslahs($_GET["Site"];
	{
	switch($get_site)	{
	case "Login":		$Site	= "Content/Login.php"; break;
	case "LoginN":		$Site	= "Content/Login/Login.php";   break;
	case "Info":		$Site	= "Content/Info.php";    break;
	default: 			$Site = "Content/Login.php";   break;
	} } else {
					$Site = "Content/Login.php";
}

include($Site);
Was soll am zweiten Beispiel unsicher sein? Und ob man switch oder eine fallunterscheidung mit if-elseif-else macht ist Haarspalterei.
 
Zurück
Oben