Что означает сообщение об ошибке PHP "Уведомление: использование undefined constant" означает?
PHP пишет эту ошибку в журналах: "Примечание: использование константы undefined".
Ошибка в журналах:
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)
Соответствующие строки кода:
$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]);
Что это значит и почему я вижу его?
Ответы
Ответ 1
Вам следует указать ключи массива:
$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']);
Как есть, он искал константы, называемые department
, name
, email
, message
и т.д. Когда он не находит такую константу, PHP (странно) интерпретирует ее как строку ( "отдел" и т.д.). Очевидно, что это может легко нарушиться, если вы позже определите такую константу (хотя это плохой стиль, чтобы иметь младшие константы).
Ответ 2
Сообщение об ошибке связано с неудачным фактом, что PHP неявно объявит неизвестный токен как константную строку с тем же именем.
То есть, он пытается интерпретировать это (обратите внимание на недостающие кавычки):
$_POST[department]
Единственный допустимый способ использования синтаксиса в PHP заключается в том, что ранее существовала константа department
. Так грустно, а не умирать с фатальной ошибкой на данный момент, он выдает это Уведомление и действует так, как будто константа была определена с тем же именем и значением:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Существуют различные способы получения этого сообщения об ошибке, но все они имеют одну и ту же причину - токен, который может быть константой.
Строки отсутствуют кавычки: $my_array[bad_key]
Это то, что проблема в вашем случае, и это потому, что у вас есть ключи массива строк, которые не были указаны. Исправление строковых ключей исправит ошибку:
Изменить:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
To:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Знак с переменным отсутствием доллара: var_without_dollar
Еще одна причина, по которой вы можете увидеть это сообщение об ошибке, - это оставить параметр $
от переменной или $this->
от члена. Например, любое из следующих действий приведет к аналогичному сообщению об ошибке:
my_local; // should be $my_local
my_member; // should be $this->my_member
Недопустимый символ в имени переменной: $bad-variable-name
Аналогичная, но более тонкая проблема может возникнуть, если вы попытаетесь использовать запрещенный символ в имени переменной - дефис (-
) вместо подчеркивания _
будет распространенным случаем.
Например, это нормально, поскольку в именах переменных допускаются символы подчеркивания:
if (123 === $my_var) {
do_something();
}
Но это не так:
if (123 === $my-var) {
do_something();
}
Он будет интерпретироваться так же, как это:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Обращаясь к константе класса без указания класса scope
Чтобы ссылаться на константу класса, вам нужно указать область видимости класса ::
, если вы пропустите это, PHP подумает, что вы говорите о глобальном define()
.
Например:
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
}
}
Использование константы, которая не определена в этой версии PHP, или определена в расширении, которое не установлено
Существуют некоторые системно-определенные константы, которые существуют только в более новых версиях PHP, например константы параметров режима для round()
, такие как PHP_ROUND_HALF_DOWN
существует только в PHP 5.3 или новее.
Итак, если вы попытались использовать эту функцию в PHP 5.2, скажите:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Вы получите это сообщение об ошибке:
Использование undefined константы PHP_ROUND_HALF_DOWN - предполагается 'PHP_ROUND_HALF_DOWN' Предупреждение (2): неправильный параметр count для round()
Ответ 3
вы, вероятно, забыли использовать ""
.
Например:
$_array[text] = $_var;
измените на:
$_array["text"] = $_var;
Ответ 4
Правильный способ использования пост-переменных -
<?php
$department = $_POST['department'];
?>
Использовать одиночную кавычку (')
Ответ 5
<?php
${test}="test information";
echo $test;
?>
Примечание. Использование параметра undefined constant test - предполагаемого "теста" в D:\xampp\htdocs\sp\test\envoirnmentVariables.php в строке 3 тестовая информация
Ответ 6
Вставьте одинарные кавычки.
Пример
$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']);
Ответ 7
Не уверен, что есть какая-либо разница с использованием воспламенителя кода, и я использую "" для имен, и он отлично работает.
$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"]);
С уважением,
Хорхе.
Ответ 8
Вы пропустили установку одинарных кавычек вокруг ключей массива:
$_ POST [электронная почта]
должен быть:
$_ POST [ 'электронная почта']
Ответ 9
Похоже, что предопределенные константы выборки ушли с расширением MySQL, поэтому нам нужно добавить их до первой функции...
//Предполагаемые константы выборки
define('MYSQL_BOTH',MYSQLI_BOTH);
define('MYSQL_NUM',MYSQLI_NUM);
define('MYSQL_ASSOC',MYSQLI_ASSOC);
Я тестировал и добился успеха.