Сообщение об ошибке происходит из-за неудачного факта, что 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 или определена в расширении, которое не установлено
Существуют некоторые системные константы, которые существуют только в более новых версиях 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): неверный счетчик параметров для round ()