Thomas Luethi: php Fehlermeldung / ratlos

Beitrag lesen

Hallo,

if (!($ip = $_SERVER['HTTP_X_FORWARDED_FOR']))
Ich teste doch bereits ob sie gesetzt ist.

Naja, hoechstens _sehr_ indirekt.
Du weist erstmal direkt zu, ohne zu wissen, ob die zweite Variable
existiert oder nicht.
Dann negierst Du das Ergebnis dieses Vorgangs.

Laut
http://www.php.net/manual/de/language.operators.assignment.php
gilt:
"Der Wert eines Zuweisungs-Ausdruckes ist
der zugewiesene Wert.
D.h. der Wert des Ausdruckes "$a = 3" ist 3."

Bei Dir laeuft es demzufolge so:
Mit
$ip = $_SERVER['HTTP_X_FORWARDED_FOR']
weist Du $ip den Wert einer offenbar nicht definierten Variable zu.
Der Wert des Ausdrucks ist also vermutlich auch
"undefiniert" oder eventuell FALSE.
Was die Negation (mit "!") von "undefiniert" ist, weiss ich nicht.
Das Gegenteil von FALSE waere natuerlich TRUE.

Ich faende es sauberer, klarer und sicherer,
ein isset() vorzuschalten:
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
 { ... }

  • Zum Vergleichen nimmt man _zwei_ Gleichzeichen.
    Ja, das weiß ich, aber was soll diese Information ?

Ich dachte, dass Du damit:

if (!($ip = $_SERVER['HTTP_X_FORWARDED_FOR']))

schauen wolltest, ob $ip ungleich $_SERVER... ist, also
logisch gesehen das gleiche wie

if (!($ip == $_SERVER['HTTP_X_FORWARDED_FOR']))
bzw.
if (($ip != $_SERVER['HTTP_X_FORWARDED_FOR']))

Es ist ein beliebter Fehler (der auch alten Hasen mal passiert),
nur ein Gleichzeichen zu nehmen, wenn man eigentlich
den Vergleichsoperator meint.
Solange alles "gut geht", merkt man oft lange nichts davon...

Gruesse,

Thomas