de.comp.lang.php.* FAQ

28.16. Notice: Undefined variable ...

Antwort von Johannes Frömter

Ursachen

Möglicherweise erscheint diese Meldung bei Scripten, die bisher unter älteren PHP-Versionen liefen und jetzt unter PHP 4.1.0 oder neuer eingesetzt werden. Grund dafür ist häufig das ab dieser Version defaultmäßig strenger eingestellte error_reporting in der php.ini.

Der Hinweis wird ausgegeben, weil mit einer nicht definierten Variablen hantiert wird, d. h. der Name der Variablen existiert nicht, ein konkreter Wert ist folglich auch nicht verfügbar. Durch die automatische Typ-Konvertierung wird der angenommene "Wert" NULL dann zwar in einen passenden Datentyp verwandelt - das ist aber nur ein "Notbehelf", damit das Script weiterlaufen kann.

Wenn PHP mit register_globals = off konfiguriert ist, dann werden Variablen aus Formularen (oder aus dem Query-String im URL) nicht automatisch als $variable verfügbar gemacht. Diese Trennung zwischen Script-Variablen und Input-Variablen hat den Vorteil, dass nicht durch Aufruf von z. B. script.php?login=true die Script-interne Variable $login überschrieben wird.

Abhilfen

Handelt es sich um Variablen, die per GET oder POST übergeben werden, und PHP läuft mit der Einstellung register_globals = off, dann ist es aus Sicherheitsgründen zu empfehlen, das Script an die neuen Variablennamen anzupassen ($HTTP_GET_VARS/$HTTP_POST_VARS bzw. $_GET/$_POST, siehe: Release Notes zu PHP 4.1.0).

Handelt es sich um Script-interne Variablen, sollten diese vor der Verwendung definiert werden. Bevor man also $foo .= "bla"; schreibt, um an $foo etwas anzuhängen, ist ein $foo = ""; nötig, um die Variable zu definieren und ihr einen leeren String zuzuweisen.

Möchte man optionale Variablen (z. B. Checkboxen aus einem Formular) abprüfen, sollte man isset() verwenden, um auf die Existenz der Variablen zu testen:

// Nicht empfohlene Schreibweisen
if ($checkbox)
if ($var == 'wert')

// Empfohlene Schreibweisen
if (isset($_POST['checkbox']))
if (isset($_POST['var']) && $_POST['var'] == 'wert')

Es ist zwar auch möglich, PHP auf einen niedrigeren Error reporting level zu konfigurieren (error_reporting = E_ALL & ~E_NOTICE;), aber das ist auf Dauer nicht empfehlenswert, da es nur die Ausgabe der Warnung unterdrückt, nicht aber die eigentliche Ursache des Problems beseitigt.

Valid HTML 4.01! Valid CSS!

28.16. Notice: Undefined variable ...
http://www.php-faq.de/q/q-fehler-variable.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team