1363 Stimmen

"Notice: Undefinierte Variable", "Notice: Undefinierter Index", "Warnung: Undefinierter Array-Schlüssel" und "Notice: Undefinierter Offset"

Ich führe ein PHP-Skript aus und erhalte weiterhin Fehlermeldungen wie:

Hinweis: Undefinierte Variable: my_variable_name in C:\wamp\www\mypath\index.php in Zeile 10

Hinweis: Undefinierter Index: my_index in C:\wamp\www\mypath\index.php in Zeile 11

Warnung: Undefinierter Array-Schlüssel "my_index" in C:\wamp\www\mypath\index.php in Zeile 11

Zeile 10 und 11 sehen so aus:

echo "Der Wert meiner Variablen ist: " . $my_variable_name;
echo "Der Wert meines Index ist: " . $my_array["my_index"];

Was bedeuten diese Fehlermeldungen?

Warum tauchen sie plötzlich auf? Ich benutze dieses Skript seit Jahren und hatte nie Probleme damit.

Wie kann ich sie beheben?


<strong>Dies ist eine allgemeine Referenzfrage</strong> für Leute, die auf Duplikate verlinken möchten, anstatt das Problem immer wieder erklären zu müssen. Ich halte dies für notwendig, da die meisten Antworten zu diesem Thema sehr spezifisch sind.

Verwandte Meta-Diskussion:

38voto

Ich wollte die Benachrichtigung nicht deaktivieren, weil sie hilfreich ist, aber ich wollte das viele Tippen vermeiden.

Meine Lösung war diese Funktion:

function ifexists($varname)
{
  return(isset($$varname) ? $varname : null);
}

Also, wenn ich auf $name verweisen und es ausgeben möchte, schreibe ich einfach:

Für Array-Elemente:

function ifexistsidx($var,$index)
{
  return(isset($var[$index]) ? $var[$index] : null);
}

Auf einer Seite, wenn ich auf $_REQUEST['name'] verweisen möchte:

31voto

mpyw Punkte 5321

Der beste Weg, um den Eingabestring zu erhalten, ist:

$value = filter_input(INPUT_POST, 'value');

Dieser Einzeiler ist fast äquivalent zu:

if (!isset($_POST['value'])) {
    $value = null;
} elseif (is_array($_POST['value'])) {
    $value = false;
} else {
    $value = $_POST['value'];
}

Wenn Sie unbedingt einen String-Wert möchten, genau wie:

$value = (string)filter_input(INPUT_POST, 'value');

31voto

Roger Punkte 1687

Es liegt daran, dass die Variable '$user_location' nicht definiert wird. Wenn Sie eine If-Schleife verwenden, in der Sie die Variable '$user_location' deklarieren, müssen Sie auch eine Else-Schleife haben und dieselbe definieren. Zum Beispiel:

$a = 10;
if($a == 5) {
    $user_location = 'Paris';
}
else {
}
echo $user_location;

Der obige Code wird einen Fehler erzeugen, da die If-Schleife nicht erfüllt ist und in der Else-Schleife '$user_location' nicht definiert wurde. Dennoch wurde PHP aufgefordert, die Variable auszugeben. Um den Code zu ändern, müssen Sie folgendes tun:

$a = 10;
if($a == 5) {
    $user_location='Paris';
}
else {
    $user_location='ETWAS ODER LEER';
}
echo $user_location;

30voto

Robbie Punkte 17343

Als Antwort auf die Frage "Warum treten die plötzlich auf? Ich habe dieses Skript jahrelang verwendet und hatte nie ein Problem."

Es ist sehr üblich, dass die meisten Websites unter der "Standard" Fehlermeldung "Alle Fehler anzeigen, aber keine 'Notizen' und 'Obsolete'" arbeiten. Dies wird in der php.ini festgelegt und gilt für alle Websites auf dem Server. Das bedeutet, dass diese "Notizen" in den Beispielen unterdrückt (versteckt) werden, während andere Fehler, die als kritischer angesehen werden, angezeigt/aufgezeichnet werden.

Die andere wichtige Einstellung ist, dass die Fehler verborgen werden können (d.h. display_errors auf "aus" oder "syslog" gesetzt).

In diesem Fall ist entweder die error_reporting geändert worden, um auch Notizen anzuzeigen (wie in den Beispielen) und/oder die Einstellungen wurden geändert, um display_errors auf dem Bildschirm anzuzeigen (anstatt sie zu unterdrücken/zu protokollieren).

Warum haben sie sich geändert?

Die offensichtlichste/einfachste Antwort ist, dass jemand eine dieser Einstellungen in der php.ini angepasst hat, oder eine aktualisierte Version von PHP jetzt eine andere php.ini verwendet als zuvor. Das ist der erste Ort, um nachzusehen.

Jedoch ist es auch möglich, diese Einstellungen in

  • .htconf (Webserver-Konfiguration, einschließlich vhosts und Unter-Konfigurationen)*
  • .htaccess
  • im PHP-Code selbst

zu überschreiben, und beliebige dieser Dateien könnten ebenfalls geändert worden sein.

Es gibt auch die zusätzliche Komplikation, dass die Webserver-Konfiguration .htaccess-Direktiven aktivieren/deaktivieren kann, daher müssen Sie überprüfen, ob sich diese ändern.

(.htconf / .htaccess gehen davon aus, dass Sie apache verwenden. Wenn Sie über die Befehlszeile ausführen, gilt dies nicht; wenn Sie IIS oder einen anderen Webserver verwenden, müssen Sie diese Konfigurationen entsprechend überprüfen)

Zusammenfassung

  • Überprüfen Sie, ob sich die php-Direktiven error_reporting und display_errors in der php.ini geändert haben, oder ob Sie eine andere php.ini als zuvor verwenden.
  • Überprüfen Sie, ob sich die php-Direktiven error_reporting und display_errors in .htconf (oder vhosts usw.) geändert haben
  • Überprüfen Sie, ob sich die php-Direktiven error_reporting und display_errors in .htaccess geändert haben
  • Wenn Sie Direktiven in .htaccess haben, überprüfen Sie, ob sie weiterhin im .htconf-Datei erlaubt sind
  • Überprüfen Sie schließlich Ihren Code; möglicherweise eine nicht verwandte Bibliothek; um zu sehen, ob dort error_reporting und display_errors php-Direktiven gesetzt wurden.

25voto

Die schnelle Lösung besteht darin, Ihre Variable ganz oben in Ihrem Code auf null zu setzen:

$user_location = null;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X