El mensaje de error se debe al desafortunado hecho de que PHP declarará implícitamente un token desconocido como una cadena constante del mismo nombre.
Es decir, está tratando de interpretar esto (tenga en cuenta las comillas faltantes):
$_POST[department]
La única forma válida de que esta sea una sintaxis válida en PHP es si previamente se department
definió una constante . Lamentablemente, en lugar de morir con un error Fatal en este punto, emite este Aviso y actúa como si se hubiera definido una constante con el mismo nombre y valor:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Hay varias formas de obtener este mensaje de error, pero todas tienen la misma causa raíz: un token que podría ser una constante.
Cadenas que faltan comillas: $my_array[bad_key]
Este es el problema en su caso, y es porque tiene claves de matriz de cadenas que no se han citado. Arreglar las teclas de cadena solucionará el error:
Cambio:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
A:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Signo de dólar faltante variable: var_without_dollar
Otra razón por la que puede ver este mensaje de error es si deja de lado $
una variable o $this->
un miembro. Por ejemplo, cualquiera de los siguientes podría causar un mensaje de error similar:
my_local; // should be $my_local
my_member; // should be $this->my_member
Carácter no válido en el nombre de la variable: $bad-variable-name
Un problema similar pero más sutil puede resultar si intenta usar un carácter no permitido en un nombre de variable; un guión ( -
) en lugar de un guión bajo _
sería un caso común.
Por ejemplo, esto está bien, ya que los guiones bajos están permitidos en los nombres de variables :
if (123 === $my_var) {
do_something();
}
Pero esto no es:
if (123 === $my-var) {
do_something();
}
Se interpretará de la misma manera:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Refiriéndose a una constante de clase sin especificar el alcance de la clase
Para hacer referencia a una constante de clase, debe especificar el alcance de la clase ::
, si se lo pierde de PHP, pensará que está hablando de un global define()
.
P.ej:
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
}
}
Usando una constante que no está definida en esta versión de PHP, o está definida en una extensión que no está instalada
Hay algunas constantes definidas por el sistema que solo existen en versiones más nuevas de PHP, por ejemplo, las constantes de opción de modo para round()
las que PHP_ROUND_HALF_DOWN
solo existen en PHP 5.3 o posterior.
Entonces, si trató de usar esta característica en PHP 5.2, diga:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Recibirías este mensaje de error:
Uso de la constante indefinida PHP_ROUND_HALF_DOWN: se asume la advertencia 'PHP_ROUND_HALF_DOWN' (2): recuento de parámetros incorrecto para round ()