Komunikat o błędzie jest spowodowany niefortunnym faktem, że PHP niejawnie zadeklaruje nieznany token jako stały ciąg o tej samej nazwie.
Oznacza to, że próbuje to zinterpretować (zwróć uwagę na brakujące cudzysłowy):
$_POST[department]
Jedynym prawidłowym sposobem, w jaki byłaby to poprawna składnia w PHP, jest sytuacja, gdy wcześniej department
zdefiniowano stałą . Tak więc niestety, zamiast umierać z powodu błędu krytycznego w tym momencie, wydaje to powiadomienie i działa tak, jakby stała została zdefiniowana o tej samej nazwie i wartości:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Ten komunikat o błędzie można uzyskać na różne sposoby, ale wszystkie mają tę samą główną przyczynę - token, który może być stałą.
Brakujące cudzysłowy: $my_array[bad_key]
Na tym polega problem w twoim przypadku, a to dlatego, że masz klucze tablicy ciągów, które nie są cytowane. Naprawienie klawiszy ciągów naprawi błąd:
Zmiana:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
Do:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Zmienny brakujący znak dolara: var_without_dollar
Innym powodem, dla którego możesz zobaczyć ten komunikat o błędzie, jest opuszczenie $
zmiennej lub $this->
członka. Np. Jedno z poniższych spowodowałoby podobny komunikat o błędzie:
my_local; // should be $my_local
my_member; // should be $this->my_member
Nieprawidłowy znak w nazwie zmiennej: $bad-variable-name
Podobny, ale bardziej subtelny problem może wystąpić, jeśli spróbujesz użyć niedozwolonego znaku w nazwie zmiennej - typowym przypadkiem byłby myślnik ( -
) zamiast podkreślenia _
.
Na przykład jest to OK, ponieważ podkreślenia są dozwolone w nazwach zmiennych :
if (123 === $my_var) {
do_something();
}
Ale to nie jest:
if (123 === $my-var) {
do_something();
}
Będzie to interpretowane tak samo, jak to:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Odwołanie się do stałej klasy bez określania zakresu klasy
Aby odwołać się do stałej klasy, musisz określić zakres klasy za pomocą ::
, jeśli przegapisz tę wartość, PHP pomyśli, że mówisz o globalnej define()
.
Na przykład:
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
}
}
Używanie stałej, która nie jest zdefiniowana w tej wersji PHP lub jest zdefiniowana w rozszerzeniu, które nie jest zainstalowane
Istnieje kilka stałych zdefiniowanych w systemie, które istnieją tylko w nowszych wersjach PHP, na przykład stałe opcji trybu dla, round()
takie jak PHP_ROUND_HALF_DOWN
istnieją tylko w PHP 5.3 lub nowszym.
Więc jeśli próbowałeś użyć tej funkcji w PHP 5.2, powiedz:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Otrzymasz ten komunikat o błędzie:
Użycie niezdefiniowanej stałej PHP_ROUND_HALF_DOWN - przyjęto 'PHP_ROUND_HALF_DOWN' Ostrzeżenie (2): Niewłaściwa liczba parametrów dla rundy ()