PHP zapisuje ten błąd w logach: "Uwaga: użycie niezdefiniowanej stałej".
Błąd w logach:
PHP Notice: Use of undefined constant department - assumed 'department' (line 5)
PHP Notice: Use of undefined constant name - assumed 'name' (line 6)
PHP Notice: Use of undefined constant email - assumed 'email' (line 7)
PHP Notice: Use of undefined constant message - assumed 'message' (line 8)
Odpowiednie wiersze kodu:
$department = mysql_real_escape_string($_POST[department]);
$name = mysql_real_escape_string($_POST[name]);
$email = mysql_real_escape_string($_POST[email]);
$message = mysql_real_escape_string($_POST[message]);
Co to znaczy i dlaczego to widzę?
Komunikat o błędzie jest spowodowany niefortunnym faktem, że PHP niejawnie zadeklaruje nieznany token jako stały ciąg o tej samej nazwie.
Oznacza to, że próbuje to zinterpretować (zwróć uwagę na brakujące cudzysłowy):
Jedynym prawidłowym sposobem, w jaki byłaby to poprawna składnia w PHP, jest sytuacja, gdy wcześniej
department
zdefiniowano stałą . Tak więc niestety, zamiast umierać z powodu błędu krytycznego w tym momencie, wydaje to powiadomienie i działa tak, jakby stała została zdefiniowana o tej samej nazwie i wartości:Ten komunikat o błędzie można uzyskać na różne sposoby, ale wszystkie mają tę samą główną przyczynę - token, który może być stałą.
Brakujące cudzysłowy:
$my_array[bad_key]
Na tym polega problem w twoim przypadku, a to dlatego, że masz klucze tablicy ciągów, które nie są cytowane. Naprawienie klawiszy ciągów naprawi błąd:
Zmiana:
Do:
Zmienny brakujący znak dolara:
var_without_dollar
Innym powodem, dla którego możesz zobaczyć ten komunikat o błędzie, jest opuszczenie
$
zmiennej lub$this->
członka. Np. Jedno z poniższych spowodowałoby podobny komunikat o błędzie:Nieprawidłowy znak w nazwie zmiennej:
$bad-variable-name
Podobny, ale bardziej subtelny problem może wystąpić, jeśli spróbujesz użyć niedozwolonego znaku w nazwie zmiennej - typowym przypadkiem byłby myślnik (
-
) zamiast podkreślenia_
.Na przykład jest to OK, ponieważ podkreślenia są dozwolone w nazwach zmiennych :
Ale to nie jest:
Będzie to interpretowane tak samo, jak to:
Odwołanie się do stałej klasy bez określania zakresu klasy
Aby odwołać się do stałej klasy, musisz określić zakres klasy za pomocą
::
, jeśli przegapisz tę wartość, PHP pomyśli, że mówisz o globalnejdefine()
.Na przykład:
Używanie stałej, która nie jest zdefiniowana w tej wersji PHP lub jest zdefiniowana w rozszerzeniu, które nie jest zainstalowane
Istnieje kilka stałych zdefiniowanych w systemie, które istnieją tylko w nowszych wersjach PHP, na przykład stałe opcji trybu dla,
round()
takie jakPHP_ROUND_HALF_DOWN
istnieją tylko w PHP 5.3 lub nowszym.Więc jeśli próbowałeś użyć tej funkcji w PHP 5.2, powiedz:
Otrzymasz ten komunikat o błędzie:
źródło
self::
części. Już działa.prawdopodobnie zapomniałeś użyć
""
.Na przykład:
zmień na:
źródło
Brakowało Ci umieszczania pojedynczych cudzysłowów wokół kluczy tablicy:
Powinien być:
źródło
Prawidłowy sposób używania zmiennych post to
Użyj pojedynczego cudzysłowu (')
źródło
źródło
Wstaw pojedyncze cudzysłowy.
Przykład
źródło
Nie jestem pewien, czy jest jakaś różnica. Używam kodu zapłonnika i używam "" dla nazw i działa świetnie.
pozdrowienia,
Jorge.
źródło
Wygląda na to, że predefiniowane stałe pobierania zniknęły wraz z rozszerzeniem MySQL, więc musimy je dodać przed pierwszą funkcją ...
// predefiniowane stałe pobierania
Przetestowałem i odniosłem sukces.
źródło