Le message d'erreur est dû au fait que PHP déclare implicitement un jeton inconnu comme une chaîne constante du même nom.
C'est-à-dire qu'il essaie d'interpréter ceci (notez les guillemets manquants) :
$_POST[department]
La seule façon valide pour que ce soit une syntaxe valide en PHP est qu'il y avait auparavant une constante department
défini. 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');
Vous pouvez obtenir ce message d'erreur de différentes manières, mais elles ont toutes la même cause première : un jeton qui ne peut pas être utilisé. pourrait soit une constante.
Guillemets manquants sur les cordes : $my_array[bad_key]
C'est là que réside 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. En corrigeant les clés de chaîne, vous corrigerez le problème :
Changez :
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
A :
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Le signe dollar manque dans la variable : var_without_dollar
Une autre raison pour laquelle vous pouvez voir ce message d'erreur est que si vous n'avez pas ajouté l'option $
à partir d'une variable, ou $this->
d'un membre. Par exemple, l'une ou l'autre des situations suivantes entraînerait 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 trait d'union ( -
) au lieu d'un trait de soulignement _
serait un cas courant.
Par exemple, c'est correct, puisque les underscores sont autorisés dans les noms de variables :
if (123 === $my_var) {
do_something();
}
Mais ce n'est pas le cas :
if (123 === $my-var) {
do_something();
}
Ce sera interprété de la même façon que ceci :
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Référence à une constante de classe sans spécifier la portée de la classe
Afin de faire référence à une constante de classe, vous devez spécifier l'étendue de la classe avec ::
Si vous ne le faites pas, PHP pensera que vous parlez d'un système global. define()
.
Eg :
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
}
}
Utilisation d'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.
Il y a des constantes définies par le système qui n'existent que dans les nouvelles versions de PHP, par exemple les constantes de l'option de mode de round()
comme PHP_ROUND_HALF_DOWN
n'existent qu'en PHP 5.3 ou plus.
Donc si vous essayez d'utiliser cette fonctionnalité en PHP 5.2, disons :
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Vous obtiendrez ce message d'erreur :
Utilisation de la constante non définie PHP_ROUND_. Avertissement 'PHP_ROUND_HALF_DOWN' (2) : Mauvais nombre de paramètres pour round()