JoseO: Sauberer Code und undefined variable / undefined index

Hallo,

habe in der php.ini den Wert für error_reporting von "E_ALL & ~E_NOTICE" auf "E_All" geändert und erhalte bei meinem Skript nun u.a. Nachrichten wie:
Notice: Undefined variable: xxx in ...
Notice: Undefined index: xxx in ...

Verursacht wird dieser Hinweis z.B. durch Code, wo ich einer Variablen einen Wert aus einem Array zuweise (wobei der Index im Array in diesem Fall nicht existiert!):

$catPath = $arr_currentCat['catPath'];   // $arr_currentCat['catPath']; existiert nicht im Array
Bevor ich dann die Variable $catPath verwende, frage ich ab, ob sie existiert:
if(isset($catPath)){ ... } else ...

Prinzipiell funktioniert das so auch. Meine Frage nun, handelt es sich hier um eine unsaubere Vorgehensweise (deshalb die Notices)? Wenn ja, wie müsste man das richtig bzw. sauber programmieren???

Wäre das eine sauberere Lösung?
$catPath = isset($arr_currentCat['catPath']) ? $arr_currentCat['catPath'] : null;

bzw. bei einem Array:
if($cat!=0){
    $arr_currentCat = get_catInfo($cat);
} else {
    $arr_currentCat = array();
}

Sollte ich diese Notices korrigieren und wenn ja, wie korrigiere ich sie am besten? Oder setze ich einfach den reporting level wieder um eine Stufe höher? Die Aufgabe erfüllt der Code ja in beiden Fällen und ein Sicherheitsproblem kann ich in diesem Fall auch nicht erkennen? Was meint Ihr dazu?

Besten Dank und schöne Grüße
JoseO

  1. Hallo,

    Verursacht wird dieser Hinweis z.B. durch Code, wo ich einer Variablen einen Wert aus einem Array zuweise (wobei der Index im Array in diesem Fall nicht existiert!):

      
    $variabel=array_key_exists($array,$key) ? $array[$key] : '';  
    
    

    Es gibt tatsächlich kein PHP-Code, den man nich notizfrei hinbekäme.

    Gruß aus Berlin!
    eddi

    1. Es gibt tatsächlich kein PHP-Code, den man nich notizfrei hinbekäme.

      dem muß ich stark widersprechen. schau mal auf http://fanelf.de/
      diese seite läuft mit vollem error-reporting und es gibt keine php 'notizen'.
      die hier angesprochene sache mit nicht existenten variablen oder indizees verursacht z.b. in java execptions. nur der php interpreter duldet das und gibt ne meldung. dies ist auf jeden fall nicht nur eine 'unsaubere' programmierung sondern ein fataler fehler. hier kommen auch die 'sicherheitsbedenken' her.

      1. hi,

        Es gibt tatsächlich kein PHP-Code, den man nich notizfrei hinbekäme.

        dem muß ich stark widersprechen. schau mal auf http://fanelf.de/
        diese seite läuft mit vollem error-reporting und es gibt keine php 'notizen'.

        schön.
        und wo ist da jetzt der widerspruch zu eddis aussage?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Es gibt tatsächlich kein PHP-Code, den man nich notizfrei hinbekäme.

          dem muß ich stark widersprechen. schau mal auf http://fanelf.de/
          diese seite läuft mit vollem error-reporting und es gibt keine php 'notizen'.

          schön.

          erstmal besten dank für deinen 'hack'. aber die liga 'blah' ist mir unbekannt, ebenso wie das von dir angegebene team x'or 1 or ....

          und wo ist da jetzt der widerspruch zu eddis aussage?

          es geht um 'undefinierte' variablen, nicht um manipulierte ausprägungen. hiervon ist der 'normale' benutzer nicht betroffen. die hacker können gern sinnlose ergebnisse bekommen. und das auch erst nach 3-maligen aufrufen der seite, um die benutzten variablen zu ermitteln.

          aber trotzdem vielen dank für deinen test. offensichtlich habt ihr bei itergo genug zeit dafür. oder ist das nur in hamburg so ?

      2. hi,

        schau mal auf http://fanelf.de/
        diese seite läuft mit vollem error-reporting und es gibt keine php 'notizen'.

        aber zum beispiel

        Fatal error: Call to a member function on a non-object in /home/www/web289/html/php/Klassen/Fussballelf.php on line 50

        sobald eine vom script nicht erwartete eingabe über POST reinkommt ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }