Повідомлення про помилку пов’язане з прикрим фактом, що 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): Неправильний підрахунок параметрів для раунду ()