PHP пишет эту ошибку в журналах: «Примечание: использование неопределенной константы».
Ошибка в журналах:
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]);
Что это значит и почему я вижу это?
Вы должны указать свои ключи массива:
$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 (странно) интерпретирует ее как строку («department» и т. Д.). Очевидно, что это может легко сломаться, если вы позже определите такую константу (хотя это плохой стиль, чтобы иметь строчные константы).
Сообщение об ошибке связано с неудачным фактом, что 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)...
Для того, чтобы:
$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(); }
Чтобы обратиться к константе класса, вам нужно указать область класса с ::
, если вы пропустите это, 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, например, константы параметров режима для round()
такие как PHP_ROUND_HALF_DOWN
существуют только в PHP 5.3 или новее.
Поэтому, если вы попытаетесь использовать эту функцию в PHP 5.2, скажите:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Вы получите сообщение об ошибке:
Использование неопределенной константы PHP_ROUND_HALF_DOWN – предполагается 'PHP_ROUND_HALF_DOWN' Предупреждение (2): Неверный параметр count для round ()
вы, вероятно, забыли использовать ""
.
Например:
$_array[text] = $_var;
изменить на:
$_array["text"] = $_var;
Правильный способ использования постпеременных переменных
<?php $department = $_POST['department']; ?>
Используйте одинарную кавычку (')
<?php ${test}="test information"; echo $test; ?>
Примечание: использование неопределенного постоянного теста – предполагаемый «тест» в D: \ xampp \ htdocs \ sp \ test \ envoirnmentVariables.php в тестовой информации по строке 3
Вставьте одинарные кавычки.
пример
$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 = 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"]);
С уважением,
Хорхе.
Вы пропустили размещение одинарных кавычек вокруг ключей массива:
$ _POST [почта]
должно быть:
$ _POST [ 'электронная почта']