Le message d'erreur est dû au fait malheureux que PHP déclarera implicitement un jeton inconnu comme une chaîne constante du même nom.
Autrement dit, il essaie d'interpréter cela (notez les guillemets manquants):
$_POST[department]
La seule façon valable que cette syntaxe soit valide en PHP est si une constante était précédemment department
définie. Malheureusement, plutôt que de mourir avec une erreur fatale à ce stade, il émet cet avis et agit comme si une constante avait été définie avec le même nom et la même valeur:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Il existe plusieurs façons d'obtenir ce message d'erreur, mais elles ont toutes la même cause fondamentale - un jeton qui pourrait être une constante.
Chaînes de guillemets manquants: $my_array[bad_key]
C'est le problème dans votre cas, et c'est parce que vous avez des clés de tableau de chaînes qui n'ont pas été citées. La correction des clés de chaîne corrigera le bogue:
Changement:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
À:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Signe dollar manquant variable: var_without_dollar
Une autre raison pour laquelle vous pouvez voir ce message d'erreur est si vous omettez $
de une variable ou $this->
d'un membre. Par exemple, l'un des éléments suivants provoquerait un message d'erreur similaire:
my_local; // should be $my_local
my_member; // should be $this->my_member
Caractère non valide dans le nom de la variable: $bad-variable-name
Un problème similaire mais plus subtil peut survenir si vous essayez d'utiliser un caractère non autorisé dans un nom de variable - un tiret ( -
) au lieu d'un trait de soulignement _
serait un cas courant.
Par exemple, c'est OK, car les traits de soulignement sont autorisés dans les noms de variables :
if (123 === $my_var) {
do_something();
}
Mais ce n'est pas:
if (123 === $my-var) {
do_something();
}
Cela sera interprété de la même manière:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Faire référence à une constante de classe sans spécifier la portée de la classe
Pour faire référence à une constante de classe, vous devez spécifier la portée de la classe avec ::
, si vous manquez cela, PHP pensera que vous parlez d'un global define()
.
Par exemple:
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
}
}
Utiliser une constante qui n'est pas définie dans cette version de PHP ou qui est définie dans une extension qui n'est pas installée
Certaines constantes définies par le système n'existent que dans les versions plus récentes de PHP, par exemple les constantes d'option de mode pour round()
telles PHP_ROUND_HALF_DOWN
qu'existent uniquement dans PHP 5.3 ou version ultérieure.
Donc, si vous avez essayé d'utiliser cette fonctionnalité dans PHP 5.2, dites:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Vous obtiendrez ce message d'erreur:
Utilisation d'une constante non définie PHP_ROUND_HALF_DOWN - supposé 'PHP_ROUND_HALF_DOWN' Avertissement (2): Mauvais nombre de paramètres pour round ()