Header() problem

Jasson

Aktives Mitglied
Halli hallo,

wünsche allen schon mal ein Gutes Neues Jahr
biggrin.gif

uind dann habe ich noch ein Problem
dry.gif
Musste ja kommen.

Ich habe gerade bemerkt das bei PHP 5.1.1 die funktion header(Location: "seiteblabla.php") nicht mehr funktioniert.
Wie kann man das noch lösen?

Danke
Jasson
 
QUOTE Ich habe gerade bemerkt das bei PHP 5.1.1 die funktion header(Location: "seiteblabla.php") nicht mehr funktioniert.

Sie funktioniert sicher noch, nur benutzt du sie eventuell falsch?


CODE header(Location: "seiteblabla.php")


Die Doku beschreibt die Funktion wie folgt:

CODE void header ( string string [, bool replace [, int http_response_code]] )

Also muss ein der Funktion ein String übergeben werden.


CODE header("Location: seiteblabla.php")

sollte funktionieren.
Vermutlich ist Syntaxüberprüfung strenger. Warum es allerdings vorher nicht auch schon Syntaxfehler gab, ist fraglich.
 
Also momentan habe ich folgendes:

CODE header("Location: ticker_liste_admin.php");



und da kommt der Fehler


CODE Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\ticker\ticker_neu.php:12) in C:\Programme\xampp\htdocs\ticker\ticker_neu.php on line 50
 
Habe nun eine kleine Funktion gefunden die das löst:

CODE function Redirect($url) {
if(headers_sent()) {
echo "<script type='text/javascript'>location.href='$url';</script>";
} else {
header("Location: $url");
}
}

 
Es wäre natürlich besser, wenn du den Header einfach vor allen anderen Ausgaben ( z.B. mit echo "HTML / TEXT"; ) ausgibst, dann wird der Fehler auch nicht erscheinen.

Weil Redirects mit JavaScript sind unprofessionell. Suchmaschinen und Browser mit ausgeschaltetem JavaScript beachten dies nicht, wobei das mit dem Header immer funktioniert. Ausserdem könnte dadurch der Back-Button im Browser unbrauchbar gemacht werden.
 
QUOTE Es wäre natürlich besser, wenn du den Header einfach vor allen anderen Ausgaben ( z.B. mit echo "HTML / TEXT"; ) ausgibst, dann wird der Fehler auch nicht erscheinen.



Also das habe ich jetzt nicht ganz verstanden.
unsure.gif


Die neue Seite darf ja erst an einem gewissen Punkt aufgerufen werden.
 
Hallo Jasson

Header werden immer vor jeglicher Ausgabe am Bildschirm zum Client geschickt. Hast du also irgendwo schon ein echo "xxx"; in deinem Code, gibt header(...); einen Fehler zurück.
Du musst dein Programm nun entweder so umstrukturieren, dass diese Bedingung erfüllt ist (kein Echo, bevor alle möglichen Header passiert sind), oder du verwendest eine Template-Engine wie Smarty oder patTemplate, die die Ausgabe in einer Variablen zwischenspeichern und erst am Schluss des Dokuments die display() Methode aufgerufen wird.

Grüsse
Josh
 
Josh hat vollkommen recht.

Schreibe deinen Quellcode so dass alles ausgewertet wird und am Ende des Scripts erfolgt erst die Ausgabe (echo "bla")
So kannst du jederzeit in deinem Script die header()-Funktion nutzen. Außerdem hat es den Vorteil dass es den Quelltext übersichtlicher und sauberer hält.

Gruß, Johnny
 
Und stell dir mal vor, du willst eine Tabelle mit Daten ausgeben, oberhalb welcher du eine kurze Zusammenfassung dieser Daten anzeigen willst... Ziemlich schwierig auf dem herkömmlichen Wege, oder? ;-)
 
nochmals kleine nachfrage. Betrifft das nur den Befehl "echo" oder auch "printf"?
 
QUOTE
nochmals kleine nachfrage. Betrifft das nur den Befehl "echo" oder auch "printf"?



Betrifft beides.
 
Zurück
Oben