Ich führe ein PHP-Skript aus und erhalte weiterhin Fehler wie:
Hinweis: Undefinierte Variable: mein_Variablenname in C: \ wamp \ www \ mypath \ index.php in Zeile 10
Hinweis: Undefinierter Index: my_index C: \ wamp \ www \ mypath \ index.php in Zeile 11
Zeile 10 und 11 sehen folgendermaßen aus:
echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];
Was bedeuten diese Fehlermeldungen?
Warum tauchen sie plötzlich auf? Ich habe dieses Skript jahrelang benutzt und hatte nie ein Problem.
Wie behebe ich sie?
Dies ist eine allgemeine Referenzfrage, auf die Personen als Duplikat verlinken können, anstatt das Problem immer wieder erklären zu müssen. Ich halte dies für notwendig, da die meisten realen Antworten zu diesem Thema sehr spezifisch sind.
Verwandte Meta-Diskussion:
and-notice-undef
, nur ein Vorschlag, damit die URL nicht abgeschnitten wird. Vielleicht sogar die (zu vielen) Anführungszeichen entfernen. OderPHP: “Undefined variable/index/offset” notices
and-notice-undef
. Es war nur ein (wenige) Vorschlag (e). Es wiederholt sich einfach auch seinNotice: Undefined
.Antworten:
Hinweis: Undefinierte Variable
Aus der großen Weisheit des PHP-Handbuchs :
Aus der PHP-Dokumentation :
Dies bedeutet , dass Sie nur verwenden können ,
empty()
wenn die Variable bestimmen gesetzt und zusätzlich überprüft er die Variable gegen die folgenden0
,0.0
,""
,"0"
,null
,false
oder[]
.Beispiel:
Testen Sie das obige Snippet im Online-PHP-Editor von 3v4l.org
Obwohl PHP keine Variablendeklaration erfordert, wird es empfohlen, um einige Sicherheitslücken oder Fehler zu vermeiden, bei denen vergessen würde, einer Variablen einen Wert zuzuweisen, der später im Skript verwendet wird. Was PHP im Fall von nicht deklarierten Variablen tut, ist ein sehr niedriger Fehler, der
E_NOTICE
nicht einmal standardmäßig gemeldet wird, aber das Handbuch empfiehlt, ihn während der Entwicklung zuzulassen .Möglichkeiten, um mit dem Problem umzugehen:
Empfohlen: Deklarieren Sie Ihre Variablen, z. B. wenn Sie versuchen, eine Zeichenfolge an eine undefinierte Variable anzuhängen. Oder verwenden Sie
isset()
/!empty()
, um zu überprüfen, ob sie deklariert sind, bevor Sie auf sie verweisen, wie in:Ab PHP 7.0 ist dies viel sauberer geworden. Jetzt können Sie den Null-Koaleszenz-Operator verwenden :
Legen Sie einen benutzerdefinierten Fehlerhandler für E_NOTICE fest und leiten Sie die Nachrichten von der Standardausgabe weg (möglicherweise in eine Protokolldatei):
Deaktivieren Sie E_NOTICE für die Berichterstellung. Ein schneller Weg, um nur auszuschließen,
E_NOTICE
ist:Unterdrücken Sie den Fehler mit dem Operator @ .
Hinweis: Es wird dringend empfohlen, nur Punkt 1 zu implementieren.
Hinweis: Undefinierter Index / Undefinierter Offset
Dieser Hinweis wird angezeigt, wenn Sie (oder PHP) versuchen, auf einen undefinierten Index eines Arrays zuzugreifen.
Möglichkeiten, um mit dem Problem umzugehen:
Überprüfen Sie, ob der Index vorhanden ist, bevor Sie darauf zugreifen. Hierfür können Sie verwenden
isset()
oderarray_key_exists()
:Das Sprachkonstrukt
list()
kann dies generieren, wenn es versucht, auf einen nicht vorhandenen Array-Index zuzugreifen:Zwei Variablen werden verwendet, um auf zwei Array-Elemente zuzugreifen. Es gibt jedoch nur ein Array-Element, den Index
0
. Dadurch wird Folgendes generiert:$_POST
/$_GET
/$_SESSION
VariablenDie Hinweise oben erscheinen oft beim Arbeiten mit
$_POST
,$_GET
oder$_SESSION
. Für$_POST
und$_GET
Sie müssen nur überprüfen, ob der Index vorhanden ist oder nicht, bevor Sie sie verwenden. Denn$_SESSION
Sie müssen sicherstellen, dass Sie die Sitzung gestartet habensession_start()
und dass der Index auch existiert.Beachten Sie auch, dass alle 3 Variablen Superglobale und Großbuchstaben sind.
Verbunden:
quelle
@
) hat einige Leistungsprobleme. Da alle Fehler innerhalb eines bestimmten Bereichs unterdrückt werden, kann die sorgfältige Verwendung möglicherweise Nachrichten maskieren, die Sie gerne gesehen hätten.$var = @$_GET['nonexisting'];
verursacht immer noch Notiz ..$value = isset($_POST['value']) ? $_POST['value'] : '';
anstelle von 4. zu verwenden$value = @$_POST['value'];
?Probiere diese
Oder als schnelle und schmutzige Lösung:
Hinweis zu Sitzungen:
Wenn Sie Sitzungen verwenden,
session_start();
müssen Sie diese mithilfe von Sitzungen in alle Dateien einfügen.http://php.net/manual/en/features.sessions.php
quelle
E_NOTICE
aus derphp.ini
Konfigurationsdatei verwenden, tun Sieerror_reporting = (E_ALL & ~E_NOTICE)
Fehleranzeige
@
OperatorFür unerwünschte und redundante Benachrichtigungen könnte man den dedizierten
@
Operator verwenden , um undefinierte Variablen- / Indexnachrichten » auszublenden «.isset?:
oder??
Super-Unterdrückung. Benachrichtigungen können weiterhin protokolliert werden. Und man kann@
versteckte Notizen wiederbeleben mit:set_error_handler("var_dump");
if (isset($_POST["shubmit"]))
Ihren ursprünglichen Code nicht gewöhnlich verwenden / empfehlen .@
oderisset
erst nach Überprüfung der Funktionalität.@
ist hauptsächlich für$_GET
/$_POST
Eingabeparameter akzeptabel , insbesondere wenn sie optional sind .Und da dies die meisten dieser Fragen abdeckt, wollen wir auf die häufigsten Ursachen eingehen:
$_GET
/$_POST
/$_REQUEST
Undefinierter EingangWenn Sie auf einen undefinierten Index / Offset stoßen, müssen Sie zunächst nach Tippfehlern suchen:
$count = $_GET["whatnow?"];
Zweitens, wenn der Hinweis keine offensichtliche Ursache hat, verwenden
var_dump
oderprint_r
überprüfen Sie alle Eingabearrays auf ihren aktuellen Inhalt:Beide zeigen an, ob Ihr Skript mit den richtigen oder irgendwelchen Parametern aufgerufen wurde.
Alternativ oder verwenden Sie zusätzlich Ihren Browser devtools ( F12) und überprüfen Sie die Registerkarte Netzwerk auf Anforderungen und Parameter:
POST-Parameter und GET-Eingang werden separat angezeigt.
Für
$_GET
Parameter können Sie auch bei der PeekQUERY_STRING
inPHP hat einige Regeln zu verschmelzen Nicht-Standard - Parameternamen in die Superglobals. Apache könnte auch etwas umschreiben. Auf diese Weise können Sie auch die bereitgestellten Raw-
$_COOKIES
und anderen HTTP-Anforderungsheader anzeigen.In der Adressleiste Ihres Browsers finden Sie GET-Parameter :
http://example.org/script.php?id=5&sort=desc
Die
name=value
Paare nach dem?
Fragezeichen sind Ihre Abfrageparameter (GET). Somit konnte diese URL möglicherweise nur$_GET["id"]
und ergeben$_GET["sort"]
.Überprüfen Sie abschließend Ihre
<form>
und<input>
-Deklarationen, wenn Sie einen Parameter erwarten, aber keinen erhalten.<input name=FOO>
id=
odertitle=
reicht nicht aus.method=POST
Formular sollte ausgefüllt werden$_POST
.method=GET
(oder es weglassen)$_GET
Variablen ergeben würde .action=script.php?get=param
über $ _GET und die verbleibendenmethod=POST
Felder in $ _POST nebenan bereitgestellt wird.$_REQUEST['vars']
erneut zu verwenden , wodurch GET- und POST-Parameter kombiniert werden.Wenn Sie mod_rewrite verwenden, sollten Sie sowohl die Parameter überprüfen
access.log
als auch aktivierenRewriteLog
, um fehlende Parameter herauszufinden.$_FILES
$_FILES["formname"]
.enctype=multipart/form-data
method=POST
in Ihrer<form>
Erklärung.$_COOKIE
$_COOKIE
Array wird nie direkt danachsetcookie()
gefüllt, sondern nur bei einer nachfolgenden HTTP-Anforderung.quelle
Im Allgemeinen wegen "schlechter Programmierung" und einer Möglichkeit für Fehler jetzt oder später.
if (isset($varname))
bevor Sie es verwendenquelle
Dies bedeutet, dass Sie eine Variable testen, auswerten oder drucken, der Sie noch nichts zugewiesen haben. Dies bedeutet, dass Sie entweder einen Tippfehler haben oder zuerst überprüfen müssen, ob die Variable mit etwas initialisiert wurde. Überprüfen Sie Ihre Logikpfade. Möglicherweise wird sie in einem Pfad festgelegt, jedoch nicht in einem anderen.
quelle
Ich wollte die Benachrichtigung nicht deaktivieren, weil sie hilfreich ist, aber ich wollte vermeiden, dass zu viel getippt wird.
Meine Lösung war diese Funktion:
Wenn ich also auf $ name und echo verweisen möchte, falls vorhanden, schreibe ich einfach:
Für Array-Elemente:
Auf der Seite, wenn ich auf $ _REQUEST ['name'] verweisen möchte:
quelle
$foo = "BABAR"; ifexists('foo');
wird im allgemeinen null zurück. (Kursivschrift ist php.net Kapitel.)if( !empty($user) and !empty($location) ) echo "hello $user ..."
Der beste Weg , Eingang für das Erhalten Zeichenfolge ist:
Dieser Einzeiler entspricht fast:
Wenn Sie unbedingt einen Zeichenfolgenwert wünschen , gehen Sie wie folgt vor:
quelle
Dies 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 diese definieren. Zum Beispiel:
Der obige Code erzeugt einen Fehler, da die if-Schleife nicht erfüllt ist und in der else-Schleife '$ user_location' nicht definiert wurde. Trotzdem wurde PHP gebeten, die Variable wiederzugeben. Um den Code zu ändern, müssen Sie Folgendes tun:
quelle
Als Antwort auf "" Warum erscheinen sie plötzlich? 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 nicht" Hinweise "und" Veraltet "" arbeiten. Dies wird in der php.ini festgelegt und gilt für alle Sites auf dem Server. Dies bedeutet, dass die in den Beispielen verwendeten "Hinweise" unterdrückt (ausgeblendet) werden, während andere Fehler, die als kritischer angesehen werden, angezeigt / aufgezeichnet werden.
Die andere kritische Einstellung ist, dass die Fehler ausgeblendet werden können (dh
display_errors
auf "Aus" oder "Syslog" gesetzt).Was in diesem Fall passiert ist, ist, dass entweder das
error_reporting
geändert wurde, um auch Hinweisedisplay_errors
anzuzeigen (wie in den Beispielen), und / oder dass die Einstellungen auf dem Bildschirm geändert wurden (anstatt sie zu unterdrücken / zu protokollieren).Warum haben sie sich verändert?
Die offensichtliche / einfachste Antwort ist, dass jemand eine dieser Einstellungen in php.ini angepasst hat oder eine aktualisierte Version von PHP jetzt eine andere php.ini als zuvor verwendet. Das ist der erste Ort, an dem man suchen muss.
Es ist jedoch auch möglich, diese Einstellungen in zu überschreiben
und jedes davon könnte auch geändert worden sein.
Es gibt auch die zusätzliche Komplikation, dass die Webserverkonfiguration .htaccess-Direktiven aktivieren / deaktivieren kann. Wenn Sie also Direktiven in .htaccess haben, die plötzlich starten / aufhören zu arbeiten, müssen Sie dies überprüfen.
(.htconf / .htaccess gehen davon aus, dass Sie als Apache ausgeführt werden. Wenn Sie die Befehlszeile ausführen, gilt dies nicht. Wenn Sie IIS oder einen anderen Webserver ausführen, müssen Sie diese Konfigurationen entsprechend überprüfen.)
Zusammenfassung
error_reporting
unddisplay_errors
PHP-Anweisungen in der php.ini haben sich nicht geändert oder Sie verwenden keine andere php.ini als zuvor.error_reporting
unddisplay_errors
PHP - Richtlinien in .htconf (oder vhosts usw.) haben sich nicht geänderterror_reporting
unddisplay_errors
PHP-Anweisungen in .htaccess haben sich nicht geänderterror_reporting
unddisplay_errors
PHP-Direktiven dort gesetzt wurden.quelle
Die schnelle Lösung besteht darin, Ihre Variable oben im Code auf Null zu setzen
quelle
Früher habe ich diesen Fehler verflucht, aber es kann hilfreich sein, Sie daran zu erinnern, Benutzereingaben zu entgehen.
Wenn Sie zum Beispiel dachten, dies sei ein cleverer Kurzcode:
...Denk nochmal! Eine bessere Lösung ist:
(Ich verwende eine benutzerdefinierte
html()
Funktion, um Zeichen zu entkommen. Ihr Kilometerstand kann variieren.)quelle
In PHP 7.0 ist es jetzt möglich, den Null-Koaleszenzoperator zu verwenden:
Ist gleich:
PHP Handbuch PHP 7.0
quelle
if (is_array($my_array['idontexist'] ?? '')) { dosomething(); }
isset()
, ob Sie bestanden habenis_array()
- was ein boolesches, unerwartetes Verhalten ist.Ich benutze die eigene nützliche Funktion exst (), die automatisch Variablen deklariert.
Ihr Code lautet -
quelle
In einer sehr einfachen Sprache .
Der Fehler ist, dass Sie eine Variable verwenden,
$user_location
die zuvor nicht von Ihnen definiert wurde und keinen Wert hat. Ich empfehle Ihnen daher , diese Variable vor der Verwendung zu deklarieren. Beispiel:$user_location = '';
Oder
$user_location = 'Los Angles';
Dies ist ein sehr häufiger Fehler, dem Sie begegnen können. Machen Sie sich also keine Sorgen, deklarieren Sie einfach die Variable und genießen Sie die Codierung .
quelle
Warum nicht einfach halten?
quelle
WARUM PASSIERT DIES?
Im Laufe der Zeit hat sich PHP zu einer sicherheitsorientierteren Sprache entwickelt. Einstellungen, die früher standardmäßig deaktiviert waren, sind jetzt standardmäßig aktiviert. Ein perfektes Beispiel hierfür ist
E_STRICT
, dass es ab PHP 5.4.0 standardmäßig aktiviert wurde .Darüber hinaus ist laut PHP-Dokumentation
E_NOTICE
in der php.ini standardmäßig deaktiviert. PHP-Dokumente empfehlen , es für Debugging-Zwecke zu aktivieren . Wenn ich jedoch PHP aus dem Ubuntu-Repository und vom Windows-Stack von BitNami herunterlade, sehe ich etwas anderes.Beachten Sie, dass
error_reporting
der Standardwert standardmäßig auf den Produktionswert und nicht standardmäßig auf den Standardwert eingestellt ist. Dies ist etwas verwirrend und wird nicht außerhalb von php.ini dokumentiert, daher habe ich dies bei anderen Distributionen nicht validiert.Um Ihre Frage zu beantworten, wird dieser Fehler jetzt angezeigt, wenn er zuvor nicht angezeigt wurde, weil:
Sie haben PHP installiert und die neuen Standardeinstellungen sind etwas schlecht dokumentiert, schließen sie jedoch nicht aus
E_NOTICE
.E_NOTICE
Warnungen wie undefinierte Variablen und undefinierte Indizes tragen tatsächlich dazu bei, Ihren Code sauberer und sicherer zu machen. Ich kann Ihnen sagen, dass ich vor JahrenE_NOTICE
gezwungen war, meine Variablen zu deklarieren, wenn ich aktiviert blieb. Es machte es viel einfacher, C zu lernen, wenn man nicht deklariert, dass Variablen viel störender sind.WAS KANN ICH TUN?
Deaktivieren Sie diese Option,
E_NOTICE
indem Sie den "Standardwert" kopierenE_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
und durch den derzeit nicht kommentierten Wert ersetzen, nachdem Sie sich gleich angemeldet habenerror_reporting =
. Starten Sie Apache oder PHP neu, wenn Sie CGI oder FPM verwenden. Stellen Sie sicher, dass Sie die "richtige" php.ini bearbeiten. Das richtige ist Apache, wenn Sie PHP mit Apache ausführen, fpm oder php-fpm, wenn Sie PHP-FPM ausführen, cgi, wenn Sie PHP-CGI ausführen usw. Dies ist nicht die empfohlene Methode, aber wenn Sie Legacy-Code haben, der dies tun wird Wenn es äußerst schwierig ist, es zu bearbeiten, ist es möglicherweise die beste Wahl.Deaktivieren Sie
E_NOTICE
auf Datei- oder Ordnerebene. Dies ist möglicherweise vorzuziehen, wenn Sie über Legacy-Code verfügen, die Dinge aber ansonsten "richtig" ausführen möchten. Wenden Sie sich dazu an Apache2, Nginx oder einen Server Ihrer Wahl. In Apache würden Siephp_value
innerhalb von verwenden<Directory>
.Schreiben Sie Ihren Code neu, um sauberer zu sein. Wenn Sie dies tun müssen, während Sie in eine Produktionsumgebung wechseln oder nicht möchten, dass jemand Ihre Fehler sieht, stellen Sie sicher, dass Sie die Fehleranzeige deaktivieren und nur Ihre Fehler protokollieren (siehe
display_errors
undlog_errors
in der php.ini und Ihren Servereinstellungen). .So erweitern Sie Option 3: Dies ist das Ideal. Wenn Sie diesen Weg gehen können, sollten Sie. Wenn Sie diese Route anfangs nicht verwenden, sollten Sie diese Route eventuell verschieben, indem Sie Ihren Code in einer Entwicklungsumgebung testen. Wenn Sie schon dabei sind, sollten Sie loswerden
~E_STRICT
und~E_DEPRECATED
sehen, was in Zukunft schief gehen könnte. Sie werden eine Menge ungewohnter Fehler sehen, aber es wird Sie davon abhalten, unangenehme Probleme zu haben, wenn Sie PHP in Zukunft aktualisieren müssen.WAS BEDEUTEN DIE FEHLER?
Undefined variable: my_variable_name
- Dies tritt auf, wenn vor der Verwendung keine Variable definiert wurde. Wenn das PHP-Skript ausgeführt wird, nimmt es intern nur einen Nullwert an. In welchem Szenario müssten Sie jedoch eine Variable überprüfen, bevor sie definiert wurde? Letztendlich ist dies ein Argument für "schlampigen Code". Als Entwickler kann ich Ihnen sagen, dass ich es liebe, wenn ich ein Open-Source-Projekt sehe, bei dem Variablen in ihren Bereichen so hoch definiert sind, wie sie definiert werden können. Es macht es einfacher zu sagen, welche Variablen in Zukunft auftauchen werden, und es erleichtert das Lesen / Lernen des Codes.Undefined index: my_index
- Dies tritt auf, wenn Sie versuchen, auf einen Wert in einem Array zuzugreifen, der nicht vorhanden ist. Führen Sie eine bedingte Prüfung durch, um diesen Fehler zu vermeiden.Eine andere Möglichkeit besteht darin, ein leeres Array oben in Ihrer Funktion zu deklarieren. Dies ist nicht immer möglich.
(zusätzlicher Tipp)
vim
heutzutage eher eine Person :).quelle
undefinierter Index bedeutet in einem Array, das Sie beispielsweise für einen nicht verfügbaren Array-Index angefordert haben
undefinierte Variable bedeutet, dass Sie eine vollständig nicht vorhandene Variable verwendet haben oder die beispielsweise nicht durch diesen Namen definiert oder initialisiert ist
undefinierter Versatz bedeutet, dass Sie in einem Array nach einem nicht vorhandenen Schlüssel gefragt haben. Die Lösung hierfür besteht darin, dies vor dem Gebrauch zu überprüfen
quelle
Zu diesem Teil der Frage:
Keine eindeutigen Antworten, aber hier einige mögliche Erklärungen, warum sich Einstellungen "plötzlich" ändern können:
Sie haben PHP auf eine neuere Version aktualisiert, die andere Standardeinstellungen für Fehlerberichterstattung, Anzeigefehler oder andere relevante Einstellungen enthalten kann.
Sie haben Code entfernt oder eingeführt (möglicherweise in einer Abhängigkeit), der zur Laufzeit relevante Einstellungen mit
ini_set()
oder festlegterror_reporting()
(suchen Sie diese im Code).Sie haben die Webserver-Konfiguration geändert (hier wird Apache angenommen):
.htaccess
Dateien und vhost-Konfigurationen können auch die PHP-Einstellungen ändern.Normalerweise werden Benachrichtigungen nicht angezeigt / gemeldet (siehe PHP-Handbuch ), daher ist es möglich, dass beim Einrichten des Servers die Datei php.ini aus irgendeinem Grund nicht geladen werden konnte (Dateiberechtigungen ??) und Sie die Standardeinstellungen vorgenommen haben . Später wurde der 'Fehler' (aus Versehen) behoben und jetzt kann die richtige php.ini-Datei geladen werden, wobei error_reporting so eingestellt ist, dass Hinweise angezeigt werden.
quelle
Wenn Sie mit Klassen arbeiten, müssen Sie sicherstellen, dass Sie auf Mitgliedsvariablen verweisen, indem Sie
$this
:quelle
Ein weiterer Grund, warum ein undefinierter Indexhinweis ausgelöst wird, ist, dass eine Spalte in einer Datenbankabfrage weggelassen wurde.
Dh:
Versuchen Sie dann, auf mehr Spalten / Zeilen innerhalb einer Schleife zuzugreifen.
Dh:
oder in einem
while
Schleife:Etwas anderes, das beachtet werden muss, ist, dass unter * NIX OS und Mac OS X die Groß- und Kleinschreibung beachtet wird.
Konsultieren Sie die folgenden Fragen und Antworten zu Stack:
Bei Tabellennamen in MySQL wird zwischen Groß- und Kleinschreibung unterschieden?
mysql Groß- und Kleinschreibung Tabellennamen in Abfragen
MySql - Groß- und Kleinschreibung beachten von Tabellen auf verschiedenen Servern
quelle
Mit einem ternären ist einfach, lesbar und sauber:
Pre PHP 7
Weisen Sie dem Wert einer anderen Variablen eine Variable zu, wenn diese festgelegt ist, andernfalls weisen Sie sie zu
null
(oder einen beliebigen Standardwert ):PHP 7+
Das gleiche, außer dass der Null Coalescing Operator verwendet wird . Es ist kein Aufruf mehr erforderlich,
isset()
da dies integriert ist, und es ist nicht erforderlich, die zurückzugebende Variable anzugeben, da davon ausgegangen wird, dass der Wert der zu überprüfenden Variablen zurückgegeben wird:Beide stoppen die Mitteilungen aus der OP-Frage, und beide sind das genaue Äquivalent von:
Wenn Sie keine neue Variable festlegen müssen, können Sie den zurückgegebenen Wert des Ternärs direkt verwenden, z. B. mit
echo
, Funktionsargumente usw.:Echo:
Funktion:
Das Obige funktioniert genauso mit Arrays, einschließlich Sitzungen usw., und ersetzt die zu prüfende Variable durch zB:
$_SESSION['checkMe']
oder wie viele Ebenen Sie benötigen, z.
$clients['personal']['address']['postcode']
Unterdrückung:
Es ist möglich, die PHP-Hinweise mit
@
Ihrer Fehlerberichterstattungsstufe zu unterdrücken oder zu reduzieren, aber es ist das Problem wird dadurch nicht behoben . Es wird lediglich die Meldung im Fehlerprotokoll gestoppt. Dies bedeutet, dass Ihr Code immer noch versucht hat, eine Variable zu verwenden, die nicht festgelegt wurde. Dies kann bedeuten, dass etwas nicht wie beabsichtigt funktioniert - je nachdem, wie wichtig der fehlende Wert ist.Sie sollten wirklich nach diesem Problem suchen und es angemessen behandeln, indem Sie entweder eine andere Nachricht senden oder einfach nur einen Nullwert für alles andere zurückgeben, um den genauen Status zu ermitteln.
Wenn Sie sich nur darum kümmern, dass der Hinweis nicht im Fehlerprotokoll enthalten ist, können Sie das Fehlerprotokoll optional einfach ignorieren.
quelle
Eine häufige Ursache für eine Variable, die nach einem HTML- Code nicht vorhanden ist Formulars ist, ist, dass das Formularelement nicht in einem
<form>
Tag enthalten ist:Beispiel: Element nicht im enthalten
<form>
Beispiel: Element jetzt in der
<form>
quelle
Wahrscheinlich haben Sie bis dahin die alte PHP-Version verwendet und jetzt PHP aktualisiert. Dies ist der Grund, warum es seit Jahren fehlerfrei funktioniert hat. Bis PHP4 gab es keinen Fehler, wenn Sie eine Variable verwenden, ohne sie zu definieren, aber ab PHP5 werden Fehler für Codes ausgegeben, wie in Frage gestellt.
quelle
Beim Umgang mit Dateien sind ein geeigneter Enctype und eine POST-Methode erforderlich, die einen undefinierten Indexhinweis auslösen, wenn beide nicht im Formular enthalten sind.
Das Handbuch enthält die folgende grundlegende Syntax:
HTML
PHP
Referenz:
quelle
Ich habe eine Frage dazu gestellt und wurde mit der Nachricht auf diesen Beitrag verwiesen:
Ich teile meine Frage und Lösung hier:
Dies ist der Fehler:
Zeile 154 ist das Problem. Das habe ich in Zeile 154:
Ich denke, das Problem ist, dass ich if-Bedingungen für die Variable schreibe
$city
, die nicht der Schlüssel, sondern der Wert in ist$key => $city
. Können Sie zunächst bestätigen, ob dies die Ursache für die Warnung ist? Zweitens, wenn dies das Problem ist, warum kann ich dann keine Bedingung basierend auf dem Wert schreiben? Muss es mit dem Schlüssel sein, dass ich die Bedingung schreiben muss?UPDATE 1: Das Problem ist, dass bei der Ausführung
$citiesCounterArray[$key]
manchmal der$key
Schlüssel einem Schlüssel entspricht, der nicht im$citiesCounterArray
Array vorhanden ist, dies jedoch aufgrund der Daten meiner Schleife nicht immer der Fall ist. Ich muss eine Bedingung festlegen, damit$key
der Code ausgeführt wird, falls er im Array vorhanden ist. Andernfalls überspringen Sie ihn.UPDATE 2: So habe ich es behoben mit
array_key_exists()
:quelle
Diese Fehler treten immer dann auf, wenn wir eine Variable verwenden, die nicht festgelegt ist.
Der beste Weg, um damit umzugehen, ist die Fehlerberichterstattung während der Entwicklung.
So setzen Sie die Fehlerberichterstattung auf:
Auf Produktionsservern ist die Fehlerberichterstattung deaktiviert, daher werden diese Fehler nicht angezeigt.
Auf dem Entwicklungsserver können wir jedoch die Fehlerberichterstattung festlegen.
Um diesen Fehler zu beheben, sehen wir das folgende Beispiel:
Wir können die Variablen initialisieren,
NULL
bevor wir ihre Werte zuweisen oder verwenden.Wir können den Code also wie folgt ändern:
Dies stört keine Programmlogik und erzeugt keine Benachrichtigung, selbst wenn
$test
sie keinen Wert hat.Grundsätzlich ist es immer besser, die Fehlerberichterstattung für die Entwicklung einzuschalten.
Und beheben Sie alle Fehler.
Und in der Produktion sollte die Fehlerberichterstattung deaktiviert sein.
quelle
Diese Hinweise sind darauf zurückzuführen, dass Sie die verwendete Variable nicht haben
defined
und dermy_index
Schlüssel in der$my_array
Variablen nicht vorhanden war .Diese Benachrichtigungen wurden jedes Mal ausgelöst, weil Ihre
code
nicht korrekt sind, aber wahrscheinlich hatten Sie keine Meldung von Benachrichtigungen.Lösen Sie die Fehler:
Ein anderer Weg, dies herauszubekommen:
quelle
In PHP benötigen Sie Faust, um die Variable zu definieren, danach können Sie sie verwenden.
Wir können überprüfen, ob die Variable auf sehr effiziente Weise definiert ist oder nicht!.
Einfache Erklärung
quelle