problem mit header("Location:...)
alex
- php
0 Julian Hofmann0 alex0 Thoralf Knuth0 alex0 Julian Hofmann0 alex0 Thoralf Knuth0 alex
0 Julian Hofmann
0 Henning0 alex
0 small-step
hallo...
meine seite hat folgenden aufbau:
header
mainbereich
footer
im mainbereich brauche ich die funktion header("Location:...)
nun kommt immer ne fehlermeldung das ja bereits eine ausgabe erfolgt ist. das leuchtet mir ein, nur wie kann ich das jetzt umgehen? ich kann die funktion ja nicht eher einbinden und daher wird immer schon vorher etwas ausgegeben, nämlich im header.
wäre für nen tip dankbar
Hallo.
Eventuell solltest Du den Aufbau überdenken:
Includes
header
mainbereich
footer
header
mainbereich
footer
Oder wie/warum wird Location mitten in der Seite "gebraucht"?
Grüße aus Würzburg
Julian
Hallo.
Eventuell solltest Du den Aufbau überdenken:
Includes
header
mainbereich
footer
header
mainbereich
footer
warum 2 mal das ganze?
Oder wie/warum wird Location mitten in der Seite "gebraucht"?
es wird mitten in der seite gebraucht, weil ich ein script für ein gästebuch habe und nach dem eintrag soll direkt auf ne andere seite umgeleitet werden. das GB-script beinhaltet aber nun eben den header und da stehen schon ausgaben
Hallo Alex,
Deine Probleme entstammen einem Denkfehler.
es wird mitten in der seite gebraucht, weil ich ein script für ein gästebuch habe und nach dem eintrag soll direkt auf ne andere seite umgeleitet werden. das GB-script beinhaltet aber nun eben den header und da stehen schon ausgaben
Header und auch Header( 'Location: ...' ); haben nichts mit der Ausgabe dazu sondern antworten VOR dem 'verschicken' der eigentlichen Seite dem Browser. D.h., selbst, wenn Du Dein Problem lösen würdest, würde die Ausgabe vor Header nicht angezeigt werden.
Du wirst also entweder das Konzept noch etwas überdenken müssen oder auf einen Meta-Redirect zurückgreifen müssen.
Gruss, Thoralf
Hi...
also mit header meinte ich nur meine bezeichnung für alles was im kopfbereich steht. mir gehts um die funktion header(). da ja mein kopf und fussbereich imemr gleich aussieht wird nur der mittelteil verändert und aber in diesem benötige ich die weiterleitung
Hallo.
funktion header(). da ja mein kopf
Genau da ist ja der Denkfehler. Lies doch mal kurz in der Doku den teil über die Funktion (http://www.php3.de/header).
Grüße aus Würzburg
Julian
P.S: Tom: Eine Meta-Angabe mitten in der Seite sollte auch nicht klappen - zumindest wenn der Browser sauber arbeitet.
Hmmm... hab ich wo wirklich :-)
aber ich möcht ja wie gesagt nur ne weiterleitung auf ne andere seite nachdem ein formular abgeschickt wurde. wenn in dem formular fehleingaben sind kommt ne fehlermeldung und ansonsten wird weitergeleitet. ich könnte auch ne zwischenseite machen wo ein link zu der anderen seite eingebaut ist, aber mir gehts darum das man mein formular durch drücke nauf den aktualisieren-button im browser nicht 100 mal abschicken kann, daher die weiterleitung
Hallo Alex,
aber ich möcht ja wie gesagt nur ne weiterleitung auf ne andere seite nachdem ein formular abgeschickt wurde. wenn in dem formular fehleingaben sind kommt ne fehlermeldung und ansonsten wird weitergeleitet. ich könnte auch ne zwischenseite machen wo ein link zu der anderen seite eingebaut ist, aber mir gehts darum das man mein formular durch drücke nauf den aktualisieren-button im browser nicht 100 mal abschicken kann, daher die weiterleitung
Nun kommen wir der Sache schon näher ;)
Lesestoff:
http://www.dclp-faq.de/q/q-stil-normalform.html
http://www.dclp-faq.de/q/q-formular-mehrfach.html
http://www.dclp-faq.de/q/q-formular-verarbeitung.html
Die gesamte Seite ist auch über http://www.php-faq.de/ zu erreichen, die 'komische' URL kommt daher, dass die Seite zur PHP-Newsgroup gehört, die sich unter De.Comp.Lang.Php.* befindet.
Gruss, Thoralf
Danke für die infos.
ich habe aber nun immer noch das problem das ich in meinem kopfbereich der seite noch html-ausgaben stehen hab, weil ja immer nur ein kleiner teil zwischen kopf und fussbereich verändert wird und in diesem teil mache ich den aufruf von header("Location:...)
Hallo Alex,
ich habe aber nun immer noch das problem das ich in meinem kopfbereich der seite noch html-ausgaben stehen hab, weil ja immer nur ein kleiner teil zwischen kopf und fussbereich verändert wird und in diesem teil mache ich den aufruf von header("Location:...)
Lässt sich so einfach nicht beantworten. Ich habe in meinen Projekten immer mal wieder solche Sachen und löse die immer gleich. Computer sind dazu da, montone und wiederkehrende Aufgaben abzunehmen. Also lagere ich die reproduzierbaren Inhalte wie eben Kopfbereich, Navigation, Fusszeilen, Copyrights o.usw. in extra Dateien aus. Da diese per include/require eingebunden werden, können sie den grössten Teil selbst erledigen, wie zB die Navigation anhand des aktuellen Script-Pfads zuordnen oder ich übergebe veränderliche Werte per Variable, zB das title-Tag.
Du müsstest also bissi ins Detail gehen, wie Du das bei Dir gelöst hast. Eine Fertig-Lösung wirst Du von mir nicht bekommen, allerdings werd ich vielleicht doch mal einen Feature-Artikel verfassen, wie man ein solches Seitengerüst mit PHP sinnvoll und performant gestalten kann.
Die Links, die ich Dir gegeben habe, beschreiben und lösen Probleme, die bei einer solchen Konstruktion typischerweise immer wieder auftreten. ;) Insbesondere der Hinweis auf das ReLoad-Verhindern beim Formular erscheint mir wichtig, denn ein blosses ungeprüftes Weiterleiten ist nicht nur sehr leicht zu umgehen, sondern im Endeffekt eine perfekte Waffe, da ich bei einem (D)DoS meine Requests (=Angriffe) für lau nahezu verdoppeln lassen kann. ;)
Gruss, Thoralf
Hallo.
ok, nochmal ganz langsam. Weiterleitung können auf zwei Weisen realisiert werden:
1. Per Meta-Tag (http://selfhtml.teamone.de/html/kopfdaten/meta.htm#weiterleitung), wobei das zwischen <head> und </head> stehen muss - also nicht mitten im Body-Bereich
2. Per HTTP-Header (siehe PHP-Doku), wobei die vor _jeglichem_ HTML-Code stehen muss.
Eine Weiterleitung mitten in der Seite ist meines Wissens nach nicht (zuverlässig) möglich.
Grüße aus Würzburg
Julian
Hallo,
meine seite hat folgenden aufbau:
header
mainbereich
footer
im mainbereich brauche ich die funktion header("Location:...)
Kann es sein, dass du eigentlich include verwenden willst? Mit header ("Location:...) wird doch z.B. eine andere Seite aufgerufen.
Gruß,
Henning
Ich binde über include ja die verschieden scripte ein aber header und footer sind ja immer gleich
Hallo alex,
nun kommt immer ne fehlermeldung das ja bereits eine ausgabe erfolgt ist. das leuchtet mir ein, nur wie kann ich das jetzt umgehen? ich kann die funktion ja nicht eher einbinden und daher wird immer schon vorher etwas ausgegeben, nämlich im header.
ich hatte das gleiche Problem und habe es auf die für mich bequemste art gelöst.
$head = 'blah';
$body = 'blah';
$bottom = 'blah';
show_html($head,$body,$bottom);
function show_html($head,$body,$bottom) {
html-Gerüst mit den einbindungen an den entsprechenden Stellen.
}
So kannst du was auch immer du machen möchtest machen und falls nötig die ausgabe mit dem Funktionsaufruf starten.
Gruß,
small-step
Danke dir.
ich werde das gleich mal so ausprobieren. falls es schwierigkeiten gibt werde ich mich nochmal melden
Ich müsste also erst schreiben header(....) und dann die funktion?
Hallo alex,
Ich müsste also erst schreiben header(....) und dann die funktion?
ja. Die show_html() funktion kommt bei mir immer erst ganz zum Ende. Wenn dann also header() kommt, wird die funktion gar nicht erst aufgerufen.
Gruß,
small-step