• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP include als Iframe-Ersatz

Topblocker

New member
Hallo!

Ich bin gerade dabei meine Website (im Dokumenttyp strict) validieren zu lassen. Bin auch schon fast fertig damit, mir fehlt nur noch ein Ersatz für meinen Iframe. Dabei hab ich mir folgende Lösung mit php überlegt:

PHP:
<a href="#">SeiteA</a>
<a href="#">SeiteB</a>
...
<!-- Diese Seiten sollen includiert werden. -->

<?php

if (/* Link1 angeklickt */)
{
     include 'SeiteA.php';
}

if (/* Link2 angeklickt */)
{
     include 'SeiteB.php';
}

else include 'SeiteA.php'; // Wenn kein Link angeklickt wurde, also quasi die Startseite beim Aufrufen der Website.

?>
Wie kann ich nun (wie bei einem Formular) überprüfen, welcher Link als letztes angeklickt wurde?
 
Oh da hab ich doch ein paar Fragen zu...

PHP:
$direction = ( isset($_REQUEST['dir']) && !empty($_REQUEST['dir']) ) ?    $_REQUEST['direction'] : FALSE;

Was sagt denn diese Zeile aus? Bis zu dem " !empty($_REQUEST['dir']) " komm noch mit, aber das nachfolgende versteh ich nicht^^

PHP:
$the_sites = array( 
'punkt1' => "punkt1.php", 
'punkt2' => "punkt1.php",  // müsste das nicht eher "punkt2.php" heißen?
'404' => "fehler404.php" 
);

Siehe Quellcode.

PHP:
header('HTTP/1.0 404 Not Found'); 
// 404-Header senden 
include_once('./'.$valid_sites['fehler404']); 
// und die Fallback-"Lösung" einbinden.

Wieso wird da 2x eine Error-Seite eingebunden und was ist eine "Fallbacklösung"? ^^
 
das ist nichts weiter als ein if-else vergleich (nur kürzer und eleganter)

die Bedingung steht vor dem "?", wenn diese erfüllt ist, nimmt die Variable den Wert an der nach dem Fragezeichen steht, wenn nicht, den Wert hinter dem ":"

mit fallback wird wohl gemeint sein, dass wenn die Seite nicht existiert zu einer anderen weitergeleitet wird

http://de.wikipedia.org/wiki/Toter_Link
 
Also das gleiche wie das?

PHP:
if (isset($_REQUEST['dir']) && !empty($_REQUEST['dir']))
{
    $direction = $_REQUEST['direction'];
}
else $direction = FALSE;

Diese Form find ich irgendwie einfacher und übersichtlicher^^
 
empty() liefert false wenn eine Variable nicht gesetzt ist. Da empty in diesem Fall auch keine Meldung generiert, ist das isset() überflüssig.
 
Okay hab das isset mal weggemacht...

Bis auf das hab ich am php-Code nichts geändert, aber es kommen trotzdem einige Fehlermeldungen:

Code:
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web/test/test.php:12) in /srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web/test/test.php on line 46

Warning: include_once(./) [function.include-once]: failed to open stream: Inappropriate ioctl for device in /srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web/test/test.php on line 48

Warning: include_once() [function.include]: Failed opening './' for inclusion (include_path='.:/srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web') in /srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web/test/test.php on line 48

Soll ich noch error_reporting(E_ALL); anmachen oder reicht das erstmal?^^

EDIT: Hier noch die dazugehörigen Zeilen

PHP:
if( isset($the_sites[$dir]) ) { 
//gibt es den Zeiger in unserem Array? 
include_once('./'.$the_sites[$dir]); 
/* Hier wird ein Pfad erstellt $the_sites[$dir] gibt die Datei zurück, die im Array mit dem jeweiligen Wert von $dir verbunden ist. Bei $dir = "punkt1" wird hier "punkt1.php" zurückgegeben. Danach stände bei diesem Beispiel: include_once("./punkt1.php"); 
include_once liest den Inhalt der angegebenen Datei aus und fügt ihn an der Stelle ein, wo include_once steht. Dieselbe Datei wird durch include_once nur einmal im gesamten Dokument eingefügt. */ 
} else { 
// wenn es zu $dir nichts in unserem Array gibt. 
header('HTTP/1.0 404 Not Found');  // <-- Zeile 46
// 404-Header senden 
include_once('./'.$valid_sites['fehler404']);  // <-- Zeile 48
// und die Fallback-"Lösung" einbinden. 
}
 
Zuletzt bearbeitet:
header kann man nur ändern, solange nichts ausgegeben wird. Am besten den output in einer Variable speichern und danach ausgeben. Und deine Fehlerseite existiert nicht.
 
Also ich hab folgende Dateien in meinem test-Ordner:

test.php (=index)
punkt1.php
punkt2.php
fehler404.php

Letztere müsste doch eigentlich gefunden werden?

Und welchen output genau meinst du? Sry der Code ist nicht von mir und ich kenne mich da nicht so genau aus.
 
Also ich hab das ganze mal so umgeschrieben:

PHP:
<?php

if (!empty($_REQUEST['dir'])) 
{ 
    $direction = $_REQUEST['direction']; 
} 
else $direction = FALSE;  


$the_sites = array( 
'punkt1' => "punkt1.php", 
'punkt2' => "punkt1.php", 
'404' => "fehler404.php" 
); 


if ($direction == FALSE)
{ 
    $direction = '404'; 
} 


if(isset($the_sites[$dir]))
{ 

    include_once('./'.$the_sites[$dir]); 

}
else
{

    header('HTTP/1.0 404 Not Found');

    include_once('./'.$the_sites['fehler404']);  // Zeile 34

}

?>

<html>

<head>

<title>TITEL</title>
<br>[HEADER]<br>

</head>

<body>

<br>[BODY ANFANG]<br>

<a href="?dir=punkt1">Punkt1</a><br>
<a href="?dir=punkt2">Punkt2</a>

<br>[BODY ENDE]<br>

</body>

</html>

Aber es kommen immernoch diese Fehlermeldungen:

Warning: include_once(./) [function.include-once]: failed to open stream: Inappropriate ioctl for device in /srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web/test/test.php on line 34

Warning: include_once() [function.include]: Failed opening './' for inclusion (include_path='.:/srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web') in /srv/www/httpd/phost/j/com/pytalhost/juniorunternehmen/web/test/test.php on line 34
 
Ja der ist auch nicht von mir der Code...
Jetzt funktionieren die Links zwar, aber es wird nirgends eine neue Seite geladen, nur die URL ändert sich, sehr seltsam...
 
Zurück
Oben