IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - Frame-Redirect mit PHP



Frame-Redirect mit PHP

Auf viele Webseiten mit Frames wird Javascript genutzt, um sicher zu sein, dass die Seiten im Frameset angezeigt werden. User ohne JavaScript jedoch haben davon nichts, daher sollte man dies sehr einfach mit PHP lösen.


Autor: Patrick Faes (dreamer)
Datum: 04-12-2003, 23:33:11
Referenzen: keine
Schwierigkeit: Fortgeschrittene
Ansichten: 15213x
Rating: 7 (4x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einführung

Es gibt noch immer viele Webmaster die auf Frames setzen, obwohl sie DAS Nachteil kennen: man kann seine Seiten nicht in Suchmaschinen aufnehmen lassen, weil diese dann nicht im Frameset angezeigt werden und Besucher haben auch keinen direkten Zugriff auf die Seiten. Um dies zu lösen, nehmen viele Webmaster ihre Zuflucht in JavaScript, das aber bei vielen User abgeschaltet ist und dann auch nichts mehr hilft.

Dies kann man mit PHP lösen, sodass der User nicht mehr auf Unterseiten ohne Navigation landet.

Vorgehen

Als erstes wird mit jedem Link eine Variable zur Kontrolle mitgegeben:

<a href="unterseite.php? test = positiv" target=" Name des Frames ">

In diesem Beispiel nennt sich die Variable "test" und der Wert ist "positiv". In der Praxis aber kann man diese auch kürzen um Traffic zu sparen und niedrigere Ladezeiten zu erreichen.

Als nächstes wird auf der Unterseite überprüft ob die Variable "test" einen Wert hat:
<?php
if (empty($test))
Wenn PHP den Wert True meldet, wird das Statement ausgeführt:

Header("location:http://www.seite.de/index.php");?>
exit;


Es gilt zu beachten, dass dieser Code ganz am Anfang der Seite stehen muss, selbst kein Leerzeichen darf davor stehen. So werden Besucher die nicht durch Ihre Hauptseite auf die Unterseite gelangt sind, weitergeleitet zur Hauptseite (mit dem Frameset). Dies wird gemacht mit der Funktion header() (mehr dazu).
Natürlich muss dann auch der Rest der Skripte auf der Unterseite (wo der Besucher fälschlicherweise gelandet war) nicht weiter ausgeführt werden. Dies verhindern wir mit exit; (mehr dazu).

Natürlich muss der Besucher dann wieder die richtige Unterseite finden, doch das kann man auch sehr einfach lösen. Das Skript auf die Unterseite verändert man so:

Header ( " location : http:// www.seite.de / index.php? unterseite = seite.php ")

Hierbei wird eine Variable mit übergeben, die den Namen der Unterseite trägt (in diesem Beispiel seite.php). Dieser Beispiel-Code sollte man aber nicht benutzen, da hier die Unterseite restriktiv genannt wurde. Flexibler ist es den Code einmal zu schreiben und diesen dann auf verschiedenen Seiten ein zu bauen mit include() (mehr dazu).
Dafür machen wir von der Variable $PHP_SELF Gebrauch, worin jeweils die aktuelle URL gespeichert ist. Mit der Funktion basename() wird der Pfad zur Unterseite extrahiert (mehr dazu). Dieser wird dann per URL ermittelt an der Frame-Seite:

$unterseite = basename($PHP_SELF);
Header ("location: http://www.seite.de/index.php? unterseite = $unterseite")


Die so ermittelte Seite wird dann später im Frameset geöffnet. Das macht man so:
<frameset cols="10%,*">
<?php if (empty ($unterseite) ) {echo '<frame src="unterseite1.php">';}
Else {echo "<frame src=\"$unterseite\">";}?>
</frameset>
Im Frameset werden mittels PHP die einzelne Frames eingefügt. Welchen Source die Frames bekommen, hängt dabei ab von der Variable $unterseite. Wenn dieser keinen Wert hat, wurde der Besucher also nicht weitergeleitet und der Anfangs-Frame-Inhalt kann geladen werden. Die Standard-Seite nennt sich hier unterseite1.php.

Allerdings stoßt man dann auf ein neues Problem: wenn per PHP die richtige Unterseite im Frameset geschrieben wird, dann wird diese geladen und wird auch das ganze Script nochmal auf der Unterseite ausgeführt. Dadurch werden sich im Frame immer neue Fenster öffnen.
Um dies zu verhindern, muss die Variable test auch ermittelt werden. Das geht dann so:
else {echo "<frame src=\"$unterseite?test=positiv\">";}

Anmerkung:

In diesem Artikel wurde davon ausgegangen, dass die Server-Einstellung register globals auf ON gestellt wurde. Wenn dies nicht der Fall ist (oder Sie sind sich nicht sicher ob es so ist), dann müssen Sie die Variablen die per URL ermittelt wurden, als $_GET["Variablenname"] ansprechen.

Das Skript

In den Unterseiten jeweils:
<?php
if (!isset($test))
{
$unterseite = basename($PHP_SELF);
header("location:http://www.url.de/index.php?unterseite=$unterseite");
exit;
}
und im Frameset dann noch:
<frameset>
<?php if (empty ($unterseite) ) {echo '<frame src="unterseite1.php?test=positiv">';}
else {echo "<frame src=\"$unterseite?test=positiv\">";}?>
</frameset>


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1147
Comments: 0