Matti Mäkitalo: Array Key exists

Beitrag lesen

Hi,

hab da ein PHP Buch. PHP 5.1 um genau zu sein, ja ich weiß ist schon älter. In dem Buch steht das man bei einem Array immer prüfen sollte ob es den Key gibt. Ganz wichtig ist diese Prüfung, wenn man von außen Einfluss auf dieses Array hat, z.B. wenn man ein Formular wegschickt. PHP gibt (falls richtig eingestellt) in solchen Fällen auch eine Warnung aus, also wenn man auf einen nicht existierenden Key zugreifen möchte.

Die Frage ist einfach nur warum muss man darauf achten? Kann mir da bitte jemand ein Beispiel geben wie man sowas ausnutzen könnte?

nun, einer der Arrays, die man von "außen" (also seitens des Clients) beeinflussen kann, ist $_POST. Wenn du versuchst, auf z.B. $_POST['meinkey'] zuzugreifen, der Client diesen Schlüssel aber nicht übermittelt hat, dann gibt es, wie du bereits bemerkt hast, eine Notice.

Nun ist es zunächst einmal so, dass in $_POST prinzipiell erstmal alles drinstehen kann. Du erwartest wahrscheinlich die Daten eines bestimmten Formulars, aber Requests kann jeder an jede URL stellen, dass muss nicht "von einem Formular" kommen. Wenn die Daten nicht komplett sind (also ein Feld nicht übermittelt wurde, was du aber erwartest), ist der Request des Clients fehlerhaft. Du willst diesen Fehler aber nicht ignorieren, sondern abfangen und dem Client einen Fehler bekannt geben. Und das überprüfst du z.B. mit (array_)key_exists. Die Notice hilft dir also dabei, potentielle Fehler besser zu finden.

Um das ausnützen zu können, musst du aber noch andere Fehler machen. Diese resultieren daraus, dass du in einem Feld einen Wert erwartest, der nicht vorhanden ist, und dann mit dem erwarteten Wert arbeitest. Division durch Null (ein nicht vorhandenes Feld) wäre ein Beispiel, was mir so auf Anhieb einfiele, wo du am Ende grob falsche Ergebnisse bekommst.

Bis die Tage,
Matti