복붙노트

PHP 오류 메시지 "알림 : 정의되지 않은 상수 사용"은 무엇을 의미합니까?

PHP

PHP 오류 메시지 "알림 : 정의되지 않은 상수 사용"은 무엇을 의미합니까?

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. ==============================

    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. ==============================

    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. ==============================

    3.

    당신은 아마 ""을 사용하는 것을 잊었을 것입니다.

    예 :

    $_array[text] = $_var;
    

    로 변경:

    $_array["text"] = $_var;
    
  4. ==============================

    4.

    게시물 변수를 올바르게 사용하는 방법은 다음과 같습니다.

    <?php
    
    $department = $_POST['department'];
    
    ?>
    

    작은 따옴표 ( ') 사용

  5. ==============================

    5.

    <?php 
      ${test}="test information";
      echo $test;
    ?>
    
  6. ==============================

    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. ==============================

    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. ==============================

    8.

    배열 키 주위에 작은 따옴표를 넣지 않았습니다.

    해야한다:

  9. ==============================

    9.

    사전 정의 된 가져 오기 상수가 MySQL 확장과 함께 사라 졌으므로 첫 번째 함수 앞에 추가해야합니다 ...

    // 미리 정의 된 페치 상수

    define('MYSQL_BOTH',MYSQLI_BOTH);
    define('MYSQL_NUM',MYSQLI_NUM);
    define('MYSQL_ASSOC',MYSQLI_ASSOC);
    

    나는 시험하고 성공했다.

  10. 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