manual header location problem

MeinName12

Grünschnabel
Hallo, ich verwende auf meiner Seite, wenn jemand etwas eingibt und sich Werte dadurch verändern das manual
header('Location: url');
das hat bisher immer geklappt, ich verwende es, damit er die seite neu aufruft und ich über die url einen status übergeben kann wie:
header('Location: url?status=erfolg');
und ihm dann ausgeben kann, dass er einen Erfolg hatte beim ändern seiner Werte.

Würde ich die Seite nicht neu aufrufen würden die zuvor definierten und ausgegebenen variabeln sich nicht aktualisieren und er sieht die geänderten Daten erst nach einem erneuten Seitenaufruf.

ich hoffe das war soweit verständlich.

nun hab ich in Erfahrung gebracht, dass das header Element nur funktioniert wenn zuvor nichts ausgegeben wurde. es wurde bisher immer was ausgegeben und es hat funktioniert. nun aber auf einmal nicht mehr, ich konnte in Erfahrung bringen, dass man das wohl umstellen kann in den Einstellungen. naja ich möchte das nicht unbedingt umstellen.
nun wollte ich fragen ob jemand von euch da ne alternative wüsste, wie ich das trotzdem hin bekomme.

Mit freundlichen Grüßen MeinName12
 
Das ist dann meistens ein Design-Fehler bei der Programmierungen, wenn du [phpf]header[/phpf] nach Ausgabe der Inhalte aufrufst!

Du kannst solch ein Problem z.B. durch [phpf]ob_start[/phpf] und [phpf]ob_end_flush[/phpf] lösen:
PHP:
ob_start();
// Deine Ausgabe...
header('Location: http://www.example.org');
ob_end_flush();
Ist aber eine unschöne Lösung.
 
Bei meinen Recherchen bin ich auch auf ob_start() gestoßen, bloß wusste ich nicht genau wie ich das umsetzen soll, Danke ComFreek
Nun ist die Frage was ist daran unschön? Verlängert es die Ladezeit? Frisst es Resourcen?

ich würde das dann so machen:

function status($seite){
$header = 'Location: '.$seite;
header($header);
ob_end_flush();
exit();
}

und ganz oben auf der seite
ob_start()
einfügen
und ganz unten
ob_end()

Mit ajax möchte ich das nicht machen.
 
Wenn du eh auf eine andere Seite weiterleitest, brauchst du den restlichen Inhalt erst gar nicht ausgeben:
PHP:
// Hier gibt es übrigens BB-Codes für PHP:
// [ php ]Code...[ /php ] (<-- ohne Leerzeichen!)
function stataus($seite)
{
  header('Location: '.$seite);
  exit;
}

Es hat nichts mit Ressourcen oder Ladezeiten zu tun, eher was mit schlechtem Design. Du solltest wissen, ob du weiterleitest, bevor du deinen Inhalt erzeugst.
Denn sonst erzeugst du den Inhalt, ohne in jemals zu nutzen. Das ist in etwa wie die Quadratwurzel auf einer zweiten Potenz zu ziehen.


PS: Übrigens noch herzlich Willkommen im Forum, MeinName12!
 
Zurück