IF - Bedingung wird wahr - warum?
Kalle_B
- php
Hi,
ich verstehe nicht, warum eine IF- Bedingung wahr wird.
Ein Programm wird aufgerufen mit einer besucher_id. Parameter art wird nicht erwähnt. Im Programm dann
$arr_in = array(
'besucher_id' => $_GET['besucher_id']
,'art' =>( $_GET['art'] ) ? $_GET['art'] : 0
,'kon_id' =>( $_GET['kon_id'] ) ? $_GET['kon_id'] : 0
,'evb_id' =>( $_GET['evb_id'] ) ? $_GET['evb_id'] : 0
);
Demnach hat $arr_in['art'] den Wert 0 (mit echo geprueft) und trotzdem wird diese Bedingung wahr:
if ( $zugriff && $arr_in['besucher_id'] && $arr_in['art']=='storno' )
Wie kann das sein?
LG Kalle
Hallo!
Hi,
ich verstehe nicht, warum eine IF- Bedingung wahr wird.
Ein Programm wird aufgerufen mit einer besucher_id. Parameter art wird nicht erwähnt. Im Programm dann
Demnach hat $arr_in['art'] den Wert 0 (mit echo geprueft) und trotzdem wird diese Bedingung wahr...
Hab zwar keinen Plan von PHP, aber
könnte es sein dass $arr_in['art'] garnicht gesetzt ist, also keinen Wert hat.
außerdem würde ich allein der Übersicht halber die Ausdrücke in der IF-Bedingung noch klammern: ( ($zugriff && $arr_in['besucher_id']) && ($arr_in['art']=='storno') )
Guten Tag,
if ( $zugriff && $arr_in['besucher_id'] && $arr_in['art']=='storno' )
> Wie kann das sein?
Wenn $arr\_in['art'] === 0 ist, ist 0 == 'storno' wahr. 'storno' wird zu einem Integer gecastet, da 0 auch ein Integer ist. 'storno' wird, wenn es zum Integer gecastet wird, auch 0.
~~~php
$ php -r "var_dump((int) 'storno');"
int(0)
Prüfe also besser mit === (Wert und Typ müssen übereinstimmen, kein implizites casting), statt mit ==.
Gruß
Christoph Jeschke