Moin!
als PHP-Neuling bin ich mir gerade nicht darüber im klaren, welche Funktion
(isset, empty, key_exists bzw. array_key_exists) ich nun einsetzen sollte, um zu
sehen ob ein Element in einem Array existiert.
Angenommen ich möchte nachschaun, ob ein bestimmter Parameter via
GET übergeben wurde, dann habe ich folgende, mir bekannte Möglichkeiten:- isset($_GET['p1'])
- empty($_GET['p1'])
- array_key_exists('p1', $_GET) //ab PHP4 >= 4.1.0 bzw. key_exists bei PHP 4.0.6
Dann gucken wir doch mal in die Online-Doku:
http://de3.php.net/manual/de/function.isset.php
isset -- Prüft die Existenz einer Variablen
http://de3.php.net/manual/de/function.empty.php
empty -- Prüft, ob eine Variable einen Wert enthält
http://de3.php.net/manual/de/function.array-key-exists.php
array_key_exists -- Prüft, ob ein Schlüssel in einem Array existiert
Wenn du die standardmäßigen Fehlerausgaben angeschaltet hast, dann kriegst du keine "Notice", wenn du auf eine nichtexistierende Variable zugreifst.
Wenn du hingegen die Notices sehen willst, schreibe an den Beginn deines Skriptes
error_reporting(E_ALL);
Dann wird PHP dir viele Dinge melden, die beim Zugriff auf undefinierte Variablen und falsche Konstantenangaben sonst stillschweigend korrigiert werden. Und dann wirst du möglicherweise den kompletten Unterschied aller drei Funktionen sehen.
Offensichtlich ist, dass empty() den Variableninhalt prüft. Dazu muß die Variable aber existieren. Existiert sie nicht, wird sie angelegt, mit "nichts" initialisiert und dann geprüft. empty() ergibt wahr.
isset() und array_key_exists() prüfen, ob etwas vorhanden ist. isset() hatte ich persönlich immer als Prüfung von ganzen Variablen eingeordnet und array_key_exists() eben als Prüfung von Array-Schlüsseln. Ich habe selbst noch nicht probiert, ob da Unterschiede in der Funktion liegen.
Welche Funktion sollte ich einsetzen bzw. wie macht ihr das?
So wie es aussieht, hast du drei Funktionen, die drei unterschiedliche Dinge tun (jedenfalls dem Namen nach). Nutze sie entsprechend.
Insbesondere sind isset() und empty() nicht dasselbe. Eine Variable kann leer existieren - dann wurde z.B. im Formular nichts eingetragen - oder sie kann nicht existieren - dann existierte das Feld nicht im Formular, vielleicht, weil daran manipuliert wurde.
- Sven Rautenberg
SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|