A mensagem de erro ocorre devido ao fato infeliz de que o PHP declarará implicitamente um token desconhecido como uma sequência constante de mesmo nome.
Ou seja, está tentando interpretar isso (observe as aspas ausentes):
$_POST[department]
A única maneira válida de que isso seria uma sintaxe válida no PHP é se anteriormente havia uma constante department
definida. Por isso, infelizmente, em vez de morrer com um erro fatal neste momento, ele emite este aviso e age como se uma constante tivesse sido definida com o mesmo nome e valor:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Existem várias maneiras de obter essa mensagem de erro, mas todas elas têm a mesma causa raiz - um token que pode ser uma constante.
Citações ausentes: $my_array[bad_key]
Este é o problema no seu caso, e é porque você tem chaves de matriz de string que não foram citadas. A correção das chaves da string corrigirá o erro:
Mudança:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
Para:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Cifrão variável ausente: var_without_dollar
Outro motivo para você ver essa mensagem de erro é se você deixar de fora $
de uma variável ou $this->
de um membro. Por exemplo, qualquer um dos seguintes itens causaria uma mensagem de erro semelhante:
my_local; // should be $my_local
my_member; // should be $this->my_member
Caractere inválido no nome da variável: $bad-variable-name
Um problema semelhante, porém mais sutil, pode resultar se você tentar usar um caractere não permitido em um nome de variável - um hífen ( -
) em vez de um sublinhado _
seria um caso comum.
Por exemplo, isso está OK, pois sublinhados são permitidos em nomes de variáveis :
if (123 === $my_var) {
do_something();
}
Mas isso não é:
if (123 === $my-var) {
do_something();
}
Será interpretado da mesma forma que isto:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Referindo-se a uma constante de classe sem especificar o escopo da classe
Para se referir a uma constante de classe, você precisa especificar o escopo da classe ::
; se você perder isso, o PHP pensará que você está falando de um global define()
.
Por exemplo:
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 uma constante que não está definida nesta versão do PHP ou está definida em uma extensão que não está instalada
Existem algumas constantes definidas pelo sistema que existem apenas em versões mais recentes do PHP, por exemplo, as constantes de opção de round()
modo que PHP_ROUND_HALF_DOWN
existem apenas no PHP 5.3 ou posterior.
Portanto, se você tentou usar esse recurso no PHP 5.2, diga:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Você receberá esta mensagem de erro:
Uso da constante indefinida PHP_ROUND_HALF_DOWN - assumida 'PHP_ROUND_HALF_DOWN' Aviso (2): Contagem incorreta de parâmetros para round ()