PHP 오류 메시지 "알림 : 정의되지 않은 상수 사용"은 무엇을 의미합니까?
PHPPHP 오류 메시지 "알림 : 정의되지 않은 상수 사용"은 무엇을 의미합니까?
PHP는 로그에이 오류를 씁니다 : "Notice : 정의되지 않은 상수 사용".
로그 오류 :
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)
관련 코드 줄 :
$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]);
그게 무슨 뜻이고 왜 내가 그것을 보는거야?
해결법
-
==============================
1.
배열 키를 인용해야합니다.
$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']);
즉, 부서, 이름, 전자 메일, 메시지 등의 상수를 찾고있었습니다. 상수를 찾지 못하면 PHP는 (기괴하게) 문자열을 '부서'등으로 해석합니다. 분명히, 상수를 나중에 정의하면 쉽게 파손될 수 있습니다 (소문자 상수를 사용하는 것은 좋지 않습니다).
-
==============================
2.
이 오류 메시지는 PHP가 알려지지 않은 토큰을 암시 적으로 같은 이름의 상수 문자열로 선언한다는 불행한 사실 때문에 발생합니다.
즉, 이것을 해석하려고 시도합니다 (누락 된 인용 부호 참고).
$_POST[department]
PHP에서 올바른 구문이 유효한 유일한 방법은 이전에 상수 부서가 정의 된 경우입니다. 그래서 슬프게도,이 시점에서 치명적인 오류로 죽기보다는이 알림을 발행하고 상수가 동일한 이름과 값으로 정의 된 것처럼 작동합니다.
// Implicit declaration of constant called department with value 'department' define('department', 'department');
이 오류 메시지는 여러 가지 방법으로 얻을 수 있지만 동일한 근본 원인 즉 상수 일 수있는 토큰이 있습니다.
이것은 문제가 귀하의 경우이며, 그것은 인용되지 않은 문자열 배열 키를 가지고 있기 때문입니다. 문자열 키를 수정하면 버그가 수정됩니다.
변화:
$department = mysql_real_escape_string($_POST[department]); ...(etc)...
에:
$department = mysql_real_escape_string($_POST['department']); ...(etc)...
이 오류 메시지가 표시되는 또 다른 이유는 변수에서 $ 또는 $ this->를 멤버에서 제외하는 경우입니다. 예를 들어 다음 중 하나라도 유사한 오류 메시지가 표시됩니다.
my_local; // should be $my_local my_member; // should be $this->my_member
변수 이름에 허용되지 않는 문자를 사용하려고하면 유사하지만보다 미묘한 문제가 발생할 수 있습니다. 밑줄 _ 대신 하이픈 (-)이 자주 사용됩니다.
예를 들어, 변수 이름에 밑줄이 허용되기 때문에 괜찮습니다.
if (123 === $my_var) { do_something(); }
그러나 이것은 아닙니다 :
if (123 === $my-var) { do_something(); }
다음과 같이 해석됩니다.
if (123 === $my - var) { // variable $my minus constant 'var' do_something(); }
클래스 상수를 참조하려면 ::로 클래스 범위를 지정해야합니다. PHP를 놓치게된다면 전역 정의 ()에 대해 생각할 것입니다.
예 :
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 } }
최신 버전의 PHP에서만 존재하는 시스템 정의 상수가 있습니다. 예를 들어 PHP_ROUND_HALF_DOWN과 같은 round ()의 mode 옵션 상수는 PHP 5.3 이상에서만 존재합니다.
PHP 5.2에서이 기능을 사용하려고하면 다음과 같이 말하십시오.
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
이 오류 메시지가 나타납니다.
-
==============================
3.
당신은 아마 ""을 사용하는 것을 잊었을 것입니다.
예 :
$_array[text] = $_var;
로 변경:
$_array["text"] = $_var;
-
==============================
4.
게시물 변수를 올바르게 사용하는 방법은 다음과 같습니다.
<?php $department = $_POST['department']; ?>
작은 따옴표 ( ') 사용
-
==============================
5.
<?php ${test}="test information"; echo $test; ?>
-
==============================
6.
작은 따옴표를 삽입하십시오.
예
$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']);
-
==============================
7.
코드 점화기를 사용하여 어떤 차이가 있는지 확실하지 않으며 이름에 ""를 사용하고 잘 작동합니다.
$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"]);
문안 인사,
호르헤.
-
==============================
8.
배열 키 주위에 작은 따옴표를 넣지 않았습니다.
해야한다:
-
==============================
9.
사전 정의 된 가져 오기 상수가 MySQL 확장과 함께 사라 졌으므로 첫 번째 함수 앞에 추가해야합니다 ...
// 미리 정의 된 페치 상수
define('MYSQL_BOTH',MYSQLI_BOTH); define('MYSQL_NUM',MYSQLI_NUM); define('MYSQL_ASSOC',MYSQLI_ASSOC);
나는 시험하고 성공했다.
from https://stackoverflow.com/questions/2941169/what-does-the-php-error-message-notice-use-of-undefined-constant-mean by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
아약스 파일 업로드에 FormData 사용 방법 (0) | 2018.09.03 |
---|---|
동기화되지 않은 명령. 이 명령을 지금 실행할 수 없습니다. (0) | 2018.09.03 |
PHP - 부동 소수점 정밀도 [중복] (0) | 2018.09.03 |
PHP로 시간 차이를 얻는 방법 (0) | 2018.09.03 |
PHP에서 배열로부터 '열'을 추출하는 함수가 있습니까? (0) | 2018.09.03 |