constants define - Was bedeutet die PHP-Fehlermeldung "Hinweis:Verwendung von undefinierter Konstante"?




array konstanten (9)

PHP schreibt diesen Fehler in die Logs: "Hinweis: Verwendung von undefinierter Konstante".

Fehler in den 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?


Answers

Bin mir nicht sicher, ob es einen Unterschied gibt, benutze Code-Zünder und ich benutze "" für die Namen und es funktioniert super.

$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,

Jorge.


Sieht so aus, als ob die vordefinierten Fetch-Konstanten mit der MySQL-Erweiterung verschwunden sind, also müssen wir sie vor der ersten Funktion hinzufügen ...

// Vordefinierte Abrufkonstanten

define('MYSQL_BOTH',MYSQLI_BOTH);
define('MYSQL_NUM',MYSQLI_NUM);
define('MYSQL_ASSOC',MYSQLI_ASSOC);

Ich testete und war erfolgreich.


Die richtige Art der Verwendung von Post-Variablen ist

<?php

$department = $_POST['department'];

?>

Einzelnes Angebot verwenden (')


Sie sollten Ihre Array-Schlüssel angeben:

$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']);

So wie es war, suchte es nach Konstanten namens department , name , email , message usw. Wenn es eine solche Konstante nicht findet, interpretiert es PHP (bizarr) als eine Zeichenkette ('Abteilung' usw.). Offensichtlich kann dies leicht brechen, wenn Sie später eine solche Konstante definieren (obwohl es eine schlechte Art ist, Kleinbuchstaben zu verwenden).


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

$ _POST [email]

sollte sein:

$ _POST ['E-Mail']


<?php 
  ${test}="test information";
  echo $test;
?>

Hinweis: Verwendung von undefined constant test - Annahme von "test" in D: \ xampp \ htdocs \ sp \ test \ envoirnmentVariables.php in Zeile 3 Testinformationen


Fügen Sie einfache Anführungszeichen ein.

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']); 

Die Fehlermeldung beruht auf der unglücklichen Tatsache, dass PHP ein unbekanntes Token implizit als eine konstante Zeichenfolge mit demselben Namen deklariert.

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

$_POST[department]

Der einzige gültige Weg, wie dies in PHP gültig wäre, ist, wenn vorher eine konstante department definiert wurde. So traurig, anstatt an diesem Punkt mit einem Fatalen Fehler zu sterben, gibt es diesen Hinweis aus und tut so, als ob eine Konstante mit dem gleichen 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 sie haben alle die gleiche Ursache - ein Token, das eine Konstante sein könnte.

Strings fehlen in Anführungszeichen: $my_array[bad_key]

Dies ist das Problem in Ihrem Fall, und das liegt daran, dass Sie String-Array-Schlüssel haben, die nicht zitiert wurden. Das Reparieren der Zeichenfolgenschlüssel wird den Fehler beheben:

Veränderung:

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

Zu:

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

Variable fehlendes Dollarzeichen: var_without_dollar

Ein anderer Grund, warum Sie diese Fehlermeldung sehen könnten, ist, wenn Sie das $ von einer Variablen oder $this-> von einem Mitglied $this-> . ZB würde eine der folgenden Ursachen 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 - ein Bindestrich ( - ) anstelle eines Unterstrichs _ wäre ein häufiger Fall.

Dies ist beispielsweise in Ordnung, da Unterstriche in Variablennamen zulässig sind :

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

Aber das ist nicht:

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

Es wird wie folgt interpretiert:

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

Auf eine Klassenkonstante verweisen, ohne den Klassenbereich anzugeben

Um auf eine Klassenkonstante verweisen zu können, müssen Sie den Klassenbereich mit :: angeben. Wenn Sie dies übersehen, denkt PHP, dass Sie von einem globalen define() sprechen.

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
  }
}

Eine Konstante verwenden, die in dieser Version von PHP nicht definiert ist oder in einer Erweiterung definiert ist, die nicht installiert ist

Es gibt einige PHP_ROUND_HALF_DOWN Konstanten, die nur in neueren Versionen von PHP existieren, zum Beispiel existieren die PHP_ROUND_HALF_DOWN für round() wie PHP_ROUND_HALF_DOWN 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 erhalten diese Fehlermeldung:

Verwendung von undefinierter Konstante PHP_ROUND_HALF_DOWN - angenommen 'PHP_ROUND_HALF_DOWN' Warnung (2): Falsche Parameteranzahl für round ()


Diese Hinweise basieren darauf, dass die verwendete Variable nicht defined und der Schlüssel my_index nicht in der Variablen $my_array ist.

Diese Benachrichtigungen wurden jedes Mal ausgelöst, weil Ihr code nicht korrekt ist, aber Sie haben wahrscheinlich keine Benachrichtigungen gemeldet.

Löse die Fehler:

$my_variable_name = "Variable name"; // defining variable
echo "My variable value is: " . $my_variable_name;

if(isset($my_array["my_index"])){
    echo "My index value is: " . $my_array["my_index"]; // check if my_index is set 
}

Eine andere Möglichkeit, dies herauszufinden:

ini_set("error_reporting", false)




php constants undefined