Kalle_B: IF - Bedingung wird wahr - warum?

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

  1. 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') )

  2. 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

    --
    Zend Certified Engineer
    Certified Urchin Admin
    1. Hallo, Christoph,

      Prüfe also besser mit === (Wert und Typ müssen übereinstimmen, kein implizites casting), statt mit ==.

      danke.

      LG Kalle