Frage zu einem header()

Hi Leute,

jetzt muss ich mich mal wieder mit einer Frage an euch wenden!
Ich zwei if Abfragen die vereinfacht so aussehen!

if ($action == 'post') {
	...
	if (!in_array($w, $groups)) {return header('Location: fehler.php?id=2');}
	
};

if ($action == 'reply') {
	...
	if (!in_array($w, $groups)) {return header('Location: fehler.php?id=3');}
	
};

Soweit so gut, jetzt wird aber selbst wenn

der erste Header gesendet obwohl die if-Bedingung nicht erfüllt wurde.
Jetzt frag ich mich: “Warum verdammt?”

dann ist $action nicht reply…du musst nur rausfinden warum :wink:

Ein Location-Header muss uebrigens von einem vollstaendigen URL gefolgt werden.

Und was du dir davon versprichst, die Rueckgabe von header - per Definition void - mit return weiter hochzureichen, taete mich dann auch noch interessieren.

nach PHP-Manual gibt header() nichts zurück: vllt liegt das Problem da.

[quote] void header (string $string [, bool $replace [, int $http_response_code ]]) [/quote]

Warum sollte da das Problem liegen??? :astonished:

Also

@ michi7x7: die Variable ist eigentlich schon vorhanden, aber ich schau nochmal
@ chrisb: So funktionierts aber auch? Und is das nicht besser wenns relativ ist? Wegen mehreren Domains?
@ jw-lighting: ähm daran liegts nicht

Wenn header nichts zurückgibt, was bewirkt dann das return??

[quote=“chrisb”]Ein Location-Header muss uebrigens von einem vollstaendigen URL gefolgt werden.

Und was du dir davon versprichst, die Rueckgabe von header - per Definition void - mit return weiter hochzureichen, taete mich dann auch noch interessieren.[/quote]

OK, dann machen wirs so:

$host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = 'mypage.php'; header("Location: http://$host$uri/$extra");

ein Header ohne Host wird bis jetzt von jedem Browser akzeptiert…und das passt schon :ps:

Mein ich doch auch :slight_smile: Ich habs jetzt nochmal getestet, die variablen sind alle mit inhalt und die erste if kann nicht true sein?

Du kennst also wirklich absolut jeden Browser, der derzeit existiert?
Ausserdem gibt es noch andere Clients als Browser.

Nein, tut es nicht.
Ein Fehler ist ein Fehler, ganz egal, ob es in manch beobachteter Konstellation zufaellig “funzt”.

hm ok dann werd ich den Header noch so anpassen das er von jedem Browser aktzeptiert wird!
aber der Fehler besteht immernoch…

der codeblock war schon dazu, die Fehlerzahl auf chrisb wunsch hin zu senken :wink:

Vllt hilfst du uns, wenn du mitteilst, was du mit

return header(...); bezwecken willst :wink:

damit wird auch das Skript beendet :wink:

natürlich wäre es so besser (lesbarer):

Das kommt auf den Kontext an.

in einem include wird wieder zurückgesprungen :wink:

du meinst, damit wird der Ablauf einer Funktion beendet.

wenn das ganze dann nicht innerhalb einer Funktion steht, natürlich das Script.
aber warum schreibst du dann nicht

header(); exit;
bzw.

header(); break <zahl der distanzen>;

?

Danke für Eure zahlreiche Antworten, hab das Problem gelöst und meinen Code verbessert, ein Datenbankabruf der einen Null Wert zurücklieferte war das Problem…

var_dump ud echo helfen dann ja.
wenn ich irgendwo ein problem habe, lasse ich mir zur sicherheit erstmal alle variablen ausgeben, meist findet sich der fehler dann schon.

Danke für den Tipp schau ich mir mal an!