Weiterleitung innerhalb einer Anweisung
Liebe NG,
Ich bin nicht sehr bewandert, was php betrifft und habe versucht einen
kleinen Zugangsschutz mittels captcha zu basteln und ein Tutorial
diesbezüglich gemacht. Soweit so gut. Das Tutorial bezog sich auf ein
Kontaktformular, ich will das aber nutzen, um den Zugang zu einem
Webbereich zu schützen. Folgende Bedingung klappt:
// Nach Eingabe des korrekten Captcha-Codes
if ($Fehlerfrei)
{
// Code zum Email-Versand ausfuehren
echo "<h2>Der Zugang zur Testsite wurde gestattet!</h2>"; //
weiterleitung zum Fragebogen
//header("refresh: 3; url=3Dhttp://www.meineseite.de/");
}
Leider klappt dann das header refresh nicht (ist nicht zulässig). Ich
benötige also eine einfache Weiterleitung, wenn die Bedingung erfüllt
ist.
Kann mir jemand einen Tip geben, wie ich das bewerkstelligen kann?
Gruss
Kai Apel (Berlin)
Re: Weiterleitung innerhalb einer Anweisung
Kai Apel schrieb:
> Liebe NG,
>
> Ich bin nicht sehr bewandert, was php betrifft und habe versucht einen
> kleinen Zugangsschutz mittels captcha zu basteln und ein Tutorial
> diesbezüglich gemacht. Soweit so gut. Das Tutorial bezog sich auf ein=
> Kontaktformular, ich will das aber nutzen, um den Zugang zu einem
> Webbereich zu schützen. Folgende Bedingung klappt:
>
> // Nach Eingabe des korrekten Captcha-Codes
> if ($Fehlerfrei)
> {
> // Code zum Email-Versand ausfuehren
> echo "<h2>Der Zugang zur Testsite wurde gestattet!</h2>"; //
> weiterleitung zum Fragebogen
> //header("refresh: 3; url=3Dhttp://www.meineseite.de/");
>
> }
>
> Leider klappt dann das header refresh nicht (ist nicht zulässig). Ich=
> benötige also eine einfache Weiterleitung, wenn die Bedingung erfül=
lt
> ist.
> Kann mir jemand einen Tip geben, wie ich das bewerkstelligen kann?
Das waere dann ein
header('Location: http://www.example.com/');
AAAABBBBBBERRRRR
wie bei allen HTTP Headern muessen diese gesetzt sein bevor du eine
andersweitige Ausgabe gemacht hast. Also du kannst nichts anzeigen.
Evtl. suchst du aber META_REFRESH(HTML) oder was in Javascript.
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: Weiterleitung innerhalb einer Anweisung
Kai Apel schrieb:
> // Nach Eingabe des korrekten Captcha-Codes
> if ($Fehlerfrei)
> {
> // Code zum Email-Versand ausfuehren
> echo "<h2>Der Zugang zur Testsite wurde gestattet!</h2>"; //
> weiterleitung zum Fragebogen
> //header("refresh: 3; url=http://www.meineseite.de/");
>
> }
> Leider klappt dann das header refresh nicht (ist nicht zulässig). Ich
> benötige also eine einfache Weiterleitung, wenn die Bedingung erfüllt
> ist.
Du musst den Header senden, bevor du anderen Output an den Client
sendest. Also einfach den Funktionsaufruf vor das echo setzen:
if($fehlerfrei) {
// Code zum Email-Versand ausführen
// ...
// Weiterleitung nach 3 Sekunden
header("Refresh: 3; url=http://www.example.com/");
// Ausgabe
echo "<h2>...</h2>";
}
Re: Weiterleitung innerhalb einer Anweisung
Thomas Hamacher schrieb:
> Du musst den Header senden, bevor du anderen Output an den Client
> sendest. Also einfach den Funktionsaufruf vor das echo setzen:
>
> if($fehlerfrei) {
> // Code zum Email-Versand ausführen
> // ...
>
> // Weiterleitung nach 3 Sekunden
> header("Refresh: 3; url=http://www.example.com/");
>
> // Ausgabe
> echo "<h2>...</h2>";
> }
Achja, das ist natürlich nicht standardisiert und muss nicht funktionieren.
Re: Weiterleitung innerhalb einer Anweisung
..oO(Thomas Hamacher)
>Thomas Hamacher schrieb:
>
>> Du musst den Header senden, bevor du anderen Output an den Client
>> sendest. Also einfach den Funktionsaufruf vor das echo setzen:
>>
>> if($fehlerfrei) {
>> // Code zum Email-Versand ausführen
>> // ...
>>
>> // Weiterleitung nach 3 Sekunden
>> header("Refresh: 3; url=http://www.example.com/");
>>
>> // Ausgabe
>> echo "<h2>...</h2>";
>> }
>
>Achja, das ist natürlich nicht standardisiert und muss nicht funktionieren.
Das funktioniert nicht, weil es in HTTP keinen Refresh-Header gibt.
Micha
Re: Weiterleitung innerhalb einer Anweisung
Michael Fesser schrieb:
> .oO(Thomas Hamacher)
>> Thomas Hamacher schrieb:
>>> // Weiterleitung nach 3 Sekunden
>>> header("Refresh: 3; url=http://www.example.com/");
>> Achja, das ist natürlich nicht standardisiert und muss nicht funktionieren.
> Das funktioniert nicht, weil es in HTTP keinen Refresh-Header gibt.
Ja, was meinst du denn, warum ich schrieb, dass es nicht standardisiert
ist und somit nicht funktionieren *muss*? Es funktioniert de facto mit
Firefox und IE. Vielleicht auch mit anderen UAs.
Re: Weiterleitung innerhalb einer Anweisung
Michael Fesser schrieb:
> .oO(Thomas Hamacher)
>
>> Thomas Hamacher schrieb:
>>
>>> Du musst den Header senden, bevor du anderen Output an den Client
>>> sendest. Also einfach den Funktionsaufruf vor das echo setzen:
>>>
>>> if($fehlerfrei) {
>>> // Code zum Email-Versand ausführen
>>> // ...
>>>
>>> // Weiterleitung nach 3 Sekunden
>>> header("Refresh: 3; url=http://www.example.com/");
>>>
>>> // Ausgabe
>>> echo "<h2>...</h2>";
>>> }
>> Achja, das ist natürlich nicht standardisiert und muss nicht funktionieren.
>
> Das funktioniert nicht, weil es in HTTP keinen Refresh-Header gibt.
Hab ich bisher auch noch nie gesehen - ob das wirklich funktioniert oder
mit dem Meta-Refresh verwechselt wurde habe ich nicht ausprobiert.
Der vollständigkeithalber schiebe ich mal das benannten Meta-Refresh
hinterher:
<head>
<meta http-equiv="refresh" content="3; url=http://www.example.com/">
</head>
Re: Weiterleitung innerhalb einer Anweisung
Thomas Hamacher wrote:
>>>> header("Refresh: 3; url=http://www.example.com/");
>>> Achja, das ist natürlich nicht standardisiert und muss nicht funktionieren.
>> Das funktioniert nicht, weil es in HTTP keinen Refresh-Header gibt.
>
> Ja, was meinst du denn, warum ich schrieb, dass es nicht standardisiert
> ist und somit nicht funktionieren *muss*? Es funktioniert de facto mit
> Firefox und IE. Vielleicht auch mit anderen UAs.
Seit wann gibt Du denn derartige Tips? Die RFC kennts nicht. Mehr muß
man dazu eigentlich nicht sagen. Ob das vereinzelt Browser beherrschen
spielt keine Rolle! Darauf/Damit ein Anwendung aufzubauen ist
letzendlich extrem leichtsinnig da es keine Garantien gibt das dieses
Verhalten auch in nächsten Gecko-Version enthalten ist.
Also bitte nicht verwenden!
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: Weiterleitung innerhalb einer Anweisung
Ulf Kadner schrieb:
> Thomas Hamacher wrote:
>>>>> header("Refresh: 3; url=http://www.example.com/");
> Seit wann gibt Du denn derartige Tips? Die RFC kennts nicht. Mehr muß
> man dazu eigentlich nicht sagen. Ob das vereinzelt Browser beherrschen
> spielt keine Rolle! Darauf/Damit ein Anwendung aufzubauen ist
> letzendlich extrem leichtsinnig da es keine Garantien gibt das dieses
> Verhalten auch in nächsten Gecko-Version enthalten ist.
Jaja, ist ja schon gut :). Du weisst, dass ich dir da voll und ganz
zustimme. Ich wusste aber in meiner Antwort an den OP nicht, dass es den
Refresh-Header nicht gibt und dachte der OP hätte nur den Fehler gemacht
Output vor dem Header zu senden. Ich hab dann aber selber nochmal im RFC
geschaut und dann darauf hingewiesen, dass es nicht standardisiert ist
und daher nicht funktionieren muss (obwohl es im IE und FF zur Zeit
zumindest funktioniert).
Das heisst nicht, dass ich jemandem empfehle es derart zu machen.
Re: Weiterleitung innerhalb einer Anweisung
Michael Müller schrieb:
> Michael Fesser schrieb:
>> .oO(Thomas Hamacher)
>>> Thomas Hamacher schrieb:
>>>> header("Refresh: 3; url=http://www.example.com/");
>>> Achja, das ist natürlich nicht standardisiert und muss nicht funktionieren.
>> Das funktioniert nicht, weil es in HTTP keinen Refresh-Header gibt.
> Hab ich bisher auch noch nie gesehen - ob das wirklich funktioniert oder
> mit dem Meta-Refresh verwechselt wurde habe ich nicht ausprobiert.
> <meta http-equiv="refresh" content="3; url=http://www.example.com/">
Wenn du so willst, dann funktioniert das auch nicht, weil es eben keinen
Refresh-Header gibt. Das heisst auch hier ist es den Browser-Herstellern
überlassen ob es funktioniert oder nicht. Genau wie beim proprietärem
Refresh-Header.
| The http-equiv attribute can be used in place of the name attribute
| and has a special significance when documents are retrieved via the
| Hypertext Transfer Protocol (HTTP). HTTP servers may use the property
| name specified by the http-equiv attribute to create an [RFC822]-style
| header in the HTTP response. Please see the HTTP specification
| ([RFC2616]) for details on valid HTTP headers.
Es wird zudem explizit davon abgeraten das so zu nutzen:
| Note. Some user agents support the use of META to refresh the current
| page after a specified number of seconds, with the option of replacing
| it by a different URI. Authors should not use this technique to
| forward users to different pages, as this makes the page inaccessible
| to some users. Instead, automatic page forwarding should be done using
| server-side redirects.
Da man aber bei einem server-side redirect AFAIK keine Verzögerung
einbauen kann bleibt wohl nur JavaScript.
--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)