Was bedeutet die PHP-Fehlermeldung „Hinweis: Verwendung einer undefinierten Konstante“?

Lesezeit: 6 Minuten

Was bedeutet die PHP Fehlermeldung „Hinweis Verwendung einer undefinierten Konstante
Nik

PHP schreibt diesen Fehler in die Logs: “Notice: Use of undefined constant”.

Fehler in Protokollen:

PHP Notice:  Use of undefined constant department - assumed 'department' (line 5)
PHP Notice:  Use of undefined constant name - assumed 'name' (line 6)
PHP Notice:  Use of undefined constant email - assumed 'email' (line 7)
PHP Notice:  Use of undefined constant message - assumed 'message' (line 8)

Relevante Codezeilen:

$department = mysql_real_escape_string($_POST[department]);
$name = mysql_real_escape_string($_POST[name]);
$email = mysql_real_escape_string($_POST[email]);
$message = mysql_real_escape_string($_POST[message]);

Was bedeutet es und warum sehe ich es?

1647065047 977 Was bedeutet die PHP Fehlermeldung „Hinweis Verwendung einer undefinierten Konstante
Matthäus Flaschen

department soll ein sein Schnur (hier als Array-Schlüssel zu verwenden). Strings in PHP müssen in Anführungszeichen gesetzt werden. In den Tagen der längst vergangenen Zeit war PHP bei der Verwendung von Anführungszeichen für Einzelwort-Strings nachlässig, aber diese Zeiten sind lange vorbei.

Daher muss es sein 'department' oder "department".

Dasselbe gilt auch für die anderen Fehler.

Wie es ist, wurde nach Konstanten gesucht, die aufgerufen wurden department, name, email, messageusw. Wenn es eine solche Konstante nicht findet, interpretiert PHP sie (seltsamerweise) als Zeichenkette (‘department’ usw.), warnt Sie aber davor. Offensichtlich kann dies leicht brechen, wenn Sie später eine solche Konstante definieren (obwohl es ein schlechter Stil ist, Konstanten in Kleinbuchstaben zu verwenden).

  • Es bezieht sich nicht speziell auf $_POST. Das Gleiche würde auch für andere assoziative Arrays passieren.

    – Hammerit

    31. Mai 2010 um 3:47 Uhr

  • @Col. Schrapnell, wann habe ich gesagt nur Array-Schlüssel müssen in Anführungszeichen gesetzt werden? Er muss die Schlüssel zitieren, aber nicht nur sie.

    – Matthäus Flaschen

    6. November 2011 um 9:06 Uhr


  • Nun, ich meine, dass keine Notwendigkeit zu zitieren Array-Schlüssel. man muss Zeichenfolgen in Anführungszeichen setzen, keine Array-Schlüssel. ein Schlüssel erfordert keine besonderen Anführungszeichen.

    – Ihr gesunder Menschenverstand

    6. November 2011 um 11:40 Uhr

  • Es ist nicht “bizarr” … Es ist “abwärtskompatibel”. PHP erlaubte ursprünglich die Verwendung von Zeichenfolgen ohne Anführungszeichen als Schlüssel und förderte sie sogar. (Okay, vielleicht ist es immer noch “bizarr”. 🙂

    – Brian Weiß

    12. Oktober 2012 um 19:52 Uhr

  • @BrianWhite Lustige Tatsache, wann schlägt vor, diese Funktion abzulehnen, konnte ich keine Beweise dafür finden, dass es jemals offiziell empfohlen wurde, und nur Beta-Versionen von PHP 3.0 enthielten das Verhalten ohne den Hinweis, so dass es abwärtskompatibel zu einer Funktion zu sein scheint, die nie veröffentlicht wurde. Wie auch immer, es wird in PHP 8.0 weg sein, wann immer das kommt.

    – IMSoP

    30. Januar 2018 um 9:46 Uhr

Was bedeutet die PHP Fehlermeldung „Hinweis Verwendung einer undefinierten Konstante
John Carter

Die Fehlermeldung ist auf die unglückliche Tatsache zurückzuführen, dass PHP ein unbekanntes Token implizit als konstanten String mit demselben Namen deklariert.

Das heißt, es wird versucht, dies zu interpretieren (beachten Sie die fehlenden Anführungszeichen):

$_POST[department]

Die einzig gültige Art und Weise, wie dies eine gültige Syntax in PHP wäre, wäre, wenn es zuvor eine Konstante gegeben hätte department definiert. Anstatt an dieser Stelle mit einem schwerwiegenden Fehler zu sterben, gibt es leider diese Mitteilung aus und tut so, als ob eine Konstante mit demselben Namen und Wert definiert worden wäre:

// Implicit declaration of constant called department with value 'department'
define('department', 'department');  

Es gibt verschiedene Möglichkeiten, wie Sie diese Fehlermeldung erhalten können, aber alle haben dieselbe Ursache – ein Token, das könnten eine Konstante sein.

Zeichenfolgen mit fehlenden Anführungszeichen: $my_array[bad_key]

Dies ist das Problem in Ihrem Fall, und zwar, weil Sie Zeichenfolgen-Array-Schlüssel haben, die nicht in Anführungszeichen gesetzt wurden. Das Korrigieren der Zeichenfolgenschlüssel behebt den Fehler:

Ändern:

$department = mysql_real_escape_string($_POST[department]);
...(etc)...

Zu:

$department = mysql_real_escape_string($_POST['department']);
...(etc)...

Variable fehlendes Dollarzeichen: var_without_dollar

Ein weiterer Grund, warum diese Fehlermeldung möglicherweise angezeigt wird, ist, wenn Sie das weglassen $ aus einer Variablen, bzw $this-> von einem Mitglied. Beispielsweise würde eine der folgenden eine ähnliche Fehlermeldung verursachen:

my_local;   // should be $my_local
my_member;  // should be $this->my_member

Ungültiges Zeichen im Variablennamen: $bad-variable-name

Ein ähnliches, aber subtileres Problem kann auftreten, wenn Sie versuchen, ein unzulässiges Zeichen in einem Variablennamen zu verwenden – einen Bindestrich (-) anstelle eines Unterstrichs _ wäre ein häufiger Fall.

Dies ist zum Beispiel in Ordnung, da Unterstriche sind in Variablennamen erlaubt:

if (123 === $my_var) {
  do_something();
}

Aber das ist nicht:

if (123 === $my-var) {
  do_something();
}

Es wird genauso interpretiert:

if (123 === $my - var) {  // variable $my minus constant 'var'
  do_something();
}

Verweisen auf eine Klassenkonstante ohne Angabe des Klassenbereichs

Um auf eine Klassenkonstante zu verweisen, müssen Sie den Klassenbereich mit angeben ::wenn Sie dies verpassen, wird PHP denken, dass Sie über eine globale sprechen define().

Z.B:

class MyClass {
  const MY_CONST = 123;

  public function my_method() {
    return self::MY_CONST;  // This is fine
  }


  public function my_method() {
    return MyClass::MY_CONST;  // This is fine
  }

  public function my_bad_method() {
    return MY_CONST;  // BUG - need to specify class scope
  }
}

Verwenden einer Konstante, die in dieser PHP-Version nicht definiert ist oder in einer nicht installierten Erweiterung definiert ist

Es gibt einige systemdefinierte Konstanten, die nur in neueren PHP-Versionen existieren, zum Beispiel die Mode-Optionskonstanten für round() wie zum Beispiel PHP_ROUND_HALF_DOWN existieren nur in PHP 5.3 oder höher.

Wenn Sie also versucht haben, diese Funktion in PHP 5.2 zu verwenden, sagen Sie:

$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);

Sie würden diese Fehlermeldung erhalten:

Verwendung der undefinierten Konstante PHP_ROUND_HALF_DOWN – angenommen ‘PHP_ROUND_HALF_DOWN’ Warnung (2): Falsche Parameteranzahl für round()

  • Danke fürs teilen. Ich vermisste die self:: Teil. Es funktioniert jetzt.

    – moreirapontocom

    25. Juni 2018 um 23:38 Uhr

  • Ohne Zweifel ist diese Antwort umfassender als andere und verdient das Abzeichen für die beste Antwort! Ich habe den Klassenumfang zu sehr vermisst und am Ende einige wertvolle Informationen für die Zukunft erhalten. Danke, Johannes!

    – Harisch ST

    23. Juni 2019 um 12:52 Uhr

1647065047 12 Was bedeutet die PHP Fehlermeldung „Hinweis Verwendung einer undefinierten Konstante
Giancarlo

Sie haben wahrscheinlich vergessen zu verwenden "".

Zum Beispiel:

$_array[text] = $_var;

ändern:

$_array["text"] = $_var;

1647065048 98 Was bedeutet die PHP Fehlermeldung „Hinweis Verwendung einer undefinierten Konstante
Ahmed Al-Hajri

Sie haben es versäumt, Ihre Array-Schlüssel in einfache Anführungszeichen zu setzen:

$_POST[email]

sollte sein:

$_POST[’email’]

Einfache Anführungszeichen einfügen.

Beispiel

$department = mysql_real_escape_string($_POST['department']);
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']); 

1647065049 617 Was bedeutet die PHP Fehlermeldung „Hinweis Verwendung einer undefinierten Konstante
Jorge Vicente Mendoza

Ich bin mir nicht sicher, ob es einen Unterschied gibt. Ich verwende Code Igniter und ich verwende “” für die Namen und es funktioniert großartig.

$department = mysql_real_escape_string($_POST["department"]);
$name = mysql_real_escape_string($_POST["name"]);
$email = mysql_real_escape_string($_POST["email"]);
$message = mysql_real_escape_string($_POST["message"]);

Grüße,

Jörg.

1647065049 990 Was bedeutet die PHP Fehlermeldung „Hinweis Verwendung einer undefinierten Konstante
Coding-Mash

Die korrekte Verwendung von Post-Variablen ist

<?php

$department = $_POST['department'];

?>

Einfaches Anführungszeichen verwenden (‘)

992860cookie-checkWas bedeutet die PHP-Fehlermeldung „Hinweis: Verwendung einer undefinierten Konstante“?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy