Wie weiterleiten wenn Script nicht im iFrame gestartet wird ?

Fummler

Grünschnabel
Ich habe auf meinen Seiten einige iFrames in denen PHP Scripte laufen wie z.B. Newsanzeigen oder Bildershows. Nun kann ich diese Scripts aber ja auch direkt aufrufen über z.B. http://www.irgendwas.de/php/bildshow.php. Das läuft dann wohl sieht aber ziemlich dämlich aus und sollte so auch nicht sein.
Mit Html (bzw. Javascript) kann ich ja abfragen wenn ich ein Frameset hätte ob eine Html-Datei darin aufgerufen wird und wenn nicht das Frameset nachladen. Ich habe zwar auf meinen Seiten kein Frameset sondern verwende iFrameBefehle aber es muss doch auch eine Lösung geben das die PHP Scripte nicht 'lose' alleine laufen sondern die gesamte Seite (ist ja nur eine einfache Htmlseite) automatisch laden wenn sie ohne aufgerufen werden.

Kann man sowas in die Scripte reinprogrammieren und wenn ja was muss ich machen ?
Wäre super wenn Ihr mir helfen könntet.

Gruss
Christian
 
Hmm...
Das hat erstmal mit PHP nix zu tun.

Du solltest einfach per JavaScript überprüfen. Ob dein PHP Script in einem Frame, bzw. iFrame läuft. top.frames.lenght > 0, dann ist das der Fall.
Sollte das nicht der Fall sein, kannst du ja auf deinen Framesetseite verweisen.

Könnte in etwas so aussehen:
PHP:
<?php ... ?>
<script type="text/javascript">
var iFrameset = 'http://......../';

if(parent.frames.length == 0){
	self.location.href= iFrameset + "?page=" + self.location.pathname;
}
<?php ... ?>

In der iFrameSeite selbst kannst du dann über self.location.search den Parameter "page" auslesen und im IFrame die "richtige" Seite anzeigen.
 
Dazu benötigst Du javascript:

HTML:
if ( top.location == self.location )
	 top.location = "/index.php?frame=" + self.location;

So kann das Aussehen für Frames. Da ich keine IFrames verwenden, musst Du es dort mal ausprobieren, ich denke aber, dass die Funktionsweise identisch sein dürfte.

Zum Skript:
Ich prüfe damit, ob das Skript derzeit alleine im "obersten" Frame läuft und wenn ja, rufe ich den gewünschten Hauptframe (hier: index.php) auf mit dem Frame als Parameter.
In der index muss dann natürlich eben dieser Parameter ausgewertet und im (I-)Frame angezeigt werden.

Viel Erfolg!
Micha

[EDIT]Ehm - da hat Lapsus wohl eine Sekunde eher geantwortet... ;-) [/EDIT]
 
Zuletzt bearbeitet:
Da man JavaScript browserseitig einfach ausschalten kann, sind das nicht gerade sehr sichere Lösung.
Am einfachsten: Auf der Seite, wo dein (I)Frame ist, einfach ne Session setzen, und die dann im Script, dass im (I)Frame läuft abfragen.
 
Oder den Referrer abfragen. Wenns nicht die Seite des Iframes ist eben redirekten.
Lässt sich aber genausogut aushelben wie mit ner session aber viel mehr wirst du auch sonst nichr rausholen...
 
Ben Ben hat gesagt.:
Oder den Referrer abfragen. Wenns nicht die Seite des Iframes ist eben redirekten.
Lässt sich aber genausogut aushelben wie mit ner session aber viel mehr wirst du auch sonst nichr rausholen...
Der Referrer ist genauso browserabhängig, wie JavaScript. Die Version mit Sessions ist wohl die am schwierigsten zu manipulierende.
 
Oliver Gringel hat gesagt.:
Da man JavaScript browserseitig einfach ausschalten kann, sind das nicht gerade sehr sichere Lösung.
Für die Anti-Javascript-Fraktion sollte man eh immer den <NOSCRIPT>-Tag einsetzen!
Allerdings ist Deine Lösung mittels Session wirklich sicherer. Schön, dass man in diesem Forum immer mal neue Anregungen kommt und so nicht "betriebsblind" wird...

Micha
 
Danke Leute für die Tipps,
aber sorry wenn ich vielleicht blöd erscheine, wie setze ich den Tipp von Oliver mit der Session um ?
Bin leider noch nicht so fit in PHP deshalb nicht hauen wenn das für Euch Profis eine völlig einfache Frage ist. Gibt es da vielleicht irgendwo ein Codeschnipsel wo ich das draus ersehen kann oder habt Ihr sowas zur Hand ?

Gruss
Christian
 
Die Seite, wo der Frame drinne ist:
PHP:
<?php
	session_start();
	$_SESSION['imFrame'] = TRUE;
?>

[...]
<iframe src="bla.php"></iframe>
[...]
Und die Seite, die dann im Frame ist:
PHP:
<?php

session_start();
if(isset($_SESSION['imFrame']) && $_SESSION['imFrame'])
{
	echo 'jo';
	unset($_SESSION['imFrame']);
}
else
{
	echo 'no';
}

?>
 
Danke Oliver damit werde ich wohl klarkommen. Doch ein grosses Problem habe ich noch oder ich verstehe was falsch. Leider muss die Seite die das iFame beinhaltet eine html Seite bleiben und darf nicht php Seite werden. Das liegt daran das die HtmlSeiten von einem CGI Script aus aufgerufen werden und noch identifier enthalten die von dem CGI Script benutzt werden. Und da die Seite aus einem CGI kommt werden PHP Befehle also nicht ausgewertet (deshalb muss ich ja auch mit den iFrames arbeiten).

Also habe ich das Problem wie kann ich den Code:
Code:
<?php 
    session_start(); 
    $_SESSION['imFrame'] = TRUE; 
?>

in die Aufrufseite einfügen die nicht PHP direkt auswerten kann. Dürfte ich das auch mit einem iFrame machen indem ich diesen Code in eine andere Datei wie z.B. setzsession.php schreibe und dann per iFrame aufrufe ? Ich denke nicht weil dann doch wohl die Session nicht stimmt oder
Alles ziemlich verworren und kompliziert für mich.

Gruss
Christian
 
Zurück