PHP nach einer Ausgabe den Header ändern.

Killerbear

Well-known member
ID: 67641
L
20 April 2006
819
40
Man kann den header nach einer Ausgabe nicht mehr ändern.
Das ist mir klar.
Aber wie kann ich das Problem dann lösen?

Und zwar dreht sichs um folgendes.
Mein php Code ist etwas mit html zusammen gefrickelt.
Weil ja an bestimmten Stellen auf der homepage mit php gearbeitet und geprüft wird und dort dann auch etwas ausgegeben wird.

nur leider funktionieren dann an stellen zum keine Weiterleitungen
Header("Location: https://www.xxx.de/xxx.php");
oder setcookie und solche Sachen.

konkret geht es mir gerade um ein login dass bei erfolgreicher Überprüfung der Login-daten die Cookies setzten soll.
Aber das Problem kann ja auch noch später an anderen stellen auftauchen.

wie löst man so ein Problem?
gibts da nen Trick? Alternative? oder muss ich die Abfragen so auslagern, dass sie vor der ersten Ausgabe ausgeführt werden
 
wie löst man so ein Problem?
gibts da nen Trick? Alternative? oder muss ich die Abfragen so auslagern, dass sie vor der ersten Ausgabe ausgeführt werden
Der Trick is einfach: ordentlich arbeiten ;)

Die Ausgabe ist die letzte Zeile im Script. - Macht auch Sinn, da nachdem die Ausgabe gesendet wurde, nichts mehr zu tun is.

Wenn du also vorher die Ausgabe machst und dann z.B. 1000 Zeilen später fällt dir ein, dass eigentlich ein HTTP 301 gesendet werden muss, dann is das Kind schon in den Brunnen gefallen, weil der Client schon lange HTTP 200 bekommen hat.

Wie im RL: Erst denken, dann sprechen :ugly:
Analog in der Programmierung: Erst die Logik, dann die Ausgabe.
 
mhh jo.
hab ich mir schon gedacht.
So ein komisches html und php rumgefummel konnte irgendwie nicht der richtige weg sein.
Is auch total unübersichtlich.

Aber wie bekomm ich das ordentlich hin?

beispiel

if irgendwas
then irgendeine Ausgabe
else
irgendeine andere ausgabe

jetzt sind ja auch wieder ausgaben und abfrage ineinander verschachtelt.
und damit das auch noch an der richtigen stelle ist, wäre noch html davor oder danach

bsp:
<html>
<navi> navi = seite 1, seite 2, seite 3
<php>
if navi = seite 1 { include seite 1}
navi = seite 2 { include seite 2}
...
</html>

aber so is ja nicht richtig.
 
beispiel

if irgendwas
then irgendeine Ausgabe
else
irgendeine andere ausgabe
Ich quote mich selber, um dir die Antwort zu geben und nochmals den Leitsatz zu wiederholen:
Die Ausgabe ist die letzte Zeile im Script.
Gilt auch hier.

Merks dir einfach so: Im gesamten Script sollte nur ein einziges echo-Statement stehen. (Verwendest du eine Template-Engine, gilt analog: Die Ausgabe-Methode der Template-Engine wird nur ein einziges Mal aufgerufen.)

Nach einem if kann keine Ausgabe kommen. Das is Logik, da hat Ausgabe nix zu suchen.
bsp:
<html>
<navi> navi = seite 1, seite 2, seite 3
<php>
if navi = seite 1 { include seite 1}
navi = seite 2 { include seite 2}
...
</html>
Das übernimmt das Template-System. Das PHP-Script entscheidet, was wir brauchen, übergibt es ans Template-System mitsamt den restlichen nötigen Daten. Das Template-System formatiert die Daten und erzeugt das fertige Markup, was du am Ende in der letzter Codezeile ausgeben lässt.