Il messaggio di errore è dovuto al fatto sfortunato che PHP dichiarerà implicitamente un token sconosciuto come una stringa costante con lo stesso nome.
Cioè, sta cercando di interpretare questo (notare le virgolette mancanti):
$_POST[department]
L'unico modo valido per definire questa sintassi in PHP è se in precedenza fosse stata department
definita una costante . Così tristemente, piuttosto che morire con un errore fatale a questo punto, emette questo Avviso e agisce come se fosse stata definita una costante con lo stesso nome e valore:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Esistono vari modi per ottenere questo messaggio di errore, ma hanno tutti la stessa causa principale: un token che potrebbe essere una costante.
Citazioni mancanti nelle stringhe: $my_array[bad_key]
Questo è il problema nel tuo caso, ed è perché hai chiavi di array di stringhe che non sono state citate. Correggere le chiavi di stringa risolverà il bug:
Modificare:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
Per:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Segno di dollaro mancante variabile: var_without_dollar
Un altro motivo per cui potresti visualizzare questo messaggio di errore è se si interrompe $
da una variabile o $this->
da un membro. Ad esempio, uno dei seguenti potrebbe causare un messaggio di errore simile:
my_local; // should be $my_local
my_member; // should be $this->my_member
Carattere non valido nel nome della variabile: $bad-variable-name
Un problema simile ma più sottile può risultare se si tenta di utilizzare un carattere non consentito in un nome di variabile: un trattino ( -
) anziché un trattino basso _
sarebbe un caso comune.
Ad esempio, questo è OK, poiché i caratteri di sottolineatura sono consentiti nei nomi delle variabili :
if (123 === $my_var) {
do_something();
}
Ma questo non è:
if (123 === $my-var) {
do_something();
}
Sarà interpretato come questo:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Facendo riferimento a una costante di classe senza specificare l'ambito della classe
Per fare riferimento a una costante di classe è necessario specificare l'ambito della classe con ::
, se lo si perde PHP penserà che si sta parlando di un globale define()
.
Per esempio:
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
}
}
Utilizzo di una costante non definita in questa versione di PHP o definita in un'estensione non installata
Esistono alcune costanti definite dal sistema che esistono solo nelle versioni più recenti di PHP, ad esempio le costanti delle opzioni di modalità per round()
tali PHP_ROUND_HALF_DOWN
esistono solo in PHP 5.3 o versioni successive.
Quindi se hai provato a usare questa funzione in PHP 5.2, dì:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Riceverai questo messaggio di errore:
Uso della costante non definita PHP_ROUND_HALF_DOWN - presupposto 'PHP_ROUND_HALF_DOWN' Avviso (2): conteggio parametri errato per round ()