hilfe zu: Header already sent
michel gelin
- php
Hallo zusammen,
folgende situation:
M_formchecker030902.php (ist quasi design template)
enthält include von formchecker030902.php (funktioneller part)
formchecker030902.php soll bei erfolg einen neue seite anzeigen mit der erfolgsmeldung, also dachte ich sende ich einen header mit location auf die fehlerpage, leider funzt dies nicht wegen des bestehenden headers:
Meldung:
Warning: Cannot add header information - headers already sent by (output started at /home/dancepro/public_html/anmeldeformulare/tk030902/m_formchecker030902.php:8) in /home/dancepro/public_html/anmeldeformulare/tk030902/formchecker030902.php on line 235
Wie kann ich das problem beheben? Kann man headers löschen oder überschreiben? gem. php doku gibt es so was nicht, oder habe ich das falsch verstanden?
Ich hoffe Ihr versteht was ich meine!
Wäre dankbar wenn Ihr einen guten tipp habt!
gruss
michel gelin
Wie kann ich das problem beheben? Kann man headers löschen oder überschreiben? gem. php doku gibt es so was nicht, oder habe ich das falsch verstanden?
Bevor Du eine Header Information sendest, darf kein Zeichen ausgegeben werden.
Hi Benedikt,
Danke für Dein posting!
Bevor Du eine Header Information sendest, darf kein Zeichen ausgegeben werden.
ja, das habe ich auch schon bei php.net nachgelesen, doch verstehen tue ich es nicht wirklich.
Ich rufe header etc. ja auf einer seite auf die bereits zeichen ausgegeben hat, also einen header hat, dann kommt der header-befehl. Wann darf ich nun keine zeichen ausgeben?
..vielleicht ist meine frage ja absolut doof aber ich versteh das irgendwie wirklich nicht, besonders weil es früher mal funktioniert hat und ich nur an der form action was angepasst habe... (sofern ich mich recht errinnere ;-)
gruss
michel
gruss
Aloha!
Meldung:
Warning: Cannot add header information - headers already sent by (output started at /home/dancepro/public_html/anmeldeformulare/tk030902/m_formchecker030902.php:8) in /home/dancepro/public_html/anmeldeformulare/tk030902/formchecker030902.php on line 235
Wie kann ich das problem beheben? Kann man headers löschen oder überschreiben? gem. php doku gibt es so was nicht, oder habe ich das falsch verstanden?
Vermutlich nicht, ohne deine Templates nochmal komplett umzustricken.
Dein Fehler: Du gibst im M_formchecker* HTML-Text aus, willst dann aber innerhalb des includes() von formchecker* mit header() arbeiten.
Das klappt nicht. Entweder packst du das include() direkt an den Anfang (erste Zeile) von M_formchecker*, damit du noch keinen HTML-Output generierst, oder du vergißt es.
Die dritte Variante ist, die Ausgabe erst einmal zu puffern, so dass hinterher noch header zugefügt werden können. Wie das geht, und warum das möglicherweise keine besonders gute Idee ist, steht auf
www.php.net in der Erklärung zum Befehl header().
Die vierte Variante: Drehe deine Programmierung um. Normalerweise ist es doch so, dass Templates an einer ganz bestimmten Programmstelle fürs Aussehen sorgen sollen. Du solltest also den aktiven Teil des Formcheckers ansprechen, welcher je nach Datenlage möglicherweise mit dem Template was macht - nicht umgekehrt durch das Template den aktiven Teil aufrufen.
Fünfte Variante: Ändere deine Programmiertaktik. Auch der Formchecker kann die Fehlerseite ausgeben. Das kann er sogar noch viel besser, als eine externe Seite, denn du könntest das Formular erneut ausgeben, alle Eingaben sind als Value vorbelegt, und die fehlerhaften Felder sind irgendwie besonders gekennzeichnet (und kriegen per Javascript onload den focus()), um die Korrektur zu erleichtern. Dann benötigst du keine header()-Funktion mehr.
- Sven Rautenberg
Hallo Sven,
danke!
Fünfte Variante: Ändere deine Programmiertaktik. Auch der Formchecker kann die Fehlerseite ausgeben. Das kann er sogar noch viel besser, als eine externe Seite, denn du könntest das Formular erneut ausgeben, alle Eingaben sind als Value vorbelegt, und die fehlerhaften Felder sind irgendwie besonders gekennzeichnet (und kriegen per Javascript onload den focus()), um die Korrektur zu erleichtern. Dann benötigst du keine header()-Funktion mehr.
das werde ich wohl am besten so versuchen! ...jetzt gehe ich aber mal weg von der kiste, ab ins training und setze mich dann später wieder ran...
PS: Die Fehlermeldungen gebe ich schon so aus... nur die erfolgsmeldung nicht -> frag mich nicht wieso ;-) ist wohl historischen ursprungs!
gruss
michel