Ne yapar PHP hata mesajı "Notice: tanımlanmamış bir sabit Kullanımı"

4 Cevap php

PHP günlüklerinde bu hatayı yazıyor: "Uyarı: undefined sabiti Kullanımı".

Error in logs:

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)

Relevant lines of code:

$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]);

Bu ne anlama geliyor ve neden ben bunu görüyorum?

4 Cevap

Sen dizi anahtarlarını belirtmelidir:

$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']);

Olduğu gibi, bu tür bir sabit, PHP (tuhaf) bir dize ('bölge', vb) olarak yorumlar bulamazsa vb departman, isim, e-posta, mesaj, denilen sabitler arıyordu. Daha sonra böyle bir sabit tanımlı yoksa Açıkçası, bu kolayca kırılabilir (daha düşük harf sabitleri olması kötü tarzı olsa).

Hata mesajı PHP örtülü aynı isimde bir sabit dizge olarak bilinmeyen bir belirteci ilan edeceği talihsiz olmasından kaynaklanmaktadır.

İşte bu (eksik tırnak işaretleri dikkat edin) bu yorumlamaya çalışıyor gibidir:

$_POST[department]

Sabit bir department tanımlanan önceden olsaydı, bu PHP geçerli sözdizimi olacaktır tek geçerli yoludur. Yani ne yazık ki, daha doğrusu bu noktada bir Ölümcül hata ile ölmekten, bu Bildirimi sorunları ve sürekli aynı ad ve değer tanımlanmış sanki davranır:

// Implicit declaration of constant called department with value 'department'
define('department', 'department');  

İşte bu hata mesajı alabilirsiniz çeşitli yolları vardır, ama hepsi aynı kök neden var - could sabit olması bir belirteç.

Strings missing quotes: $my_array[bad_key]

Bu sorun sizin durumunuzda ne olduğunu, ve işlem olmamıştır dize dizisi anahtarları var çünkü bu. Dize anahtarlarını Tespit hata çözecektir:

Değiştir:

$department = mysql_real_escape_string($_POST[department]);
...(etc)...

Için:

$department = mysql_real_escape_string($_POST['department']);
...(etc)...

Variable missing dollar sign: var_without_dollar

Eğer bir üye bir değişken veya $this-> gelen $ bırakmak, bu hata iletisi görebilirsiniz başka nedenidir. Örneğin, aşağıdakilerden birini benzer bir hata iletisini neden olur:

my_local;   // should be $my_local
my_member;  // should be $this->my_member

Invalid character in variable name: $bad-variable-name

_, ortak bir durum olurdu yerine bir alt çizgi bir tire (-) - Bir değişken adı izin verilmeyen bir karakter kullanmaya çalışırsanız benzer ama daha ince bir konu neden olabilir.

Örneğin, bu, Tamam beri underscores are allowed in variable names:

if (123 === $my_var) {
  do_something();
}

Ama bu değildir:

if (123 === $my-var) {
  do_something();
}

Bu aynı yorumlanır olacak:

if (123 === $my - var) {  // variable $my minus constant 'var'
  do_something();
}

Referring to a class constant without specifying the class scope

Eğer, :: ile sınıf kapsamını belirlemek için, bu kapalı özledim eğer PHP bahsediyoruz düşünürler gereken bir sınıf sabit başvurmak için küresel bir define().

Örn:

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
  }
}

Using a constant that's not defined in this version of PHP, or is defined in an extension that's not installed

Sadece modu seçeneği sabitleri örneğin, PHP yeni sürümlerinde bulunan bazı sistem tanımlı sabitleri vardır round() such as PHP_ROUND_HALF_DOWN sadece PHP 5.3 veya üstü var.

Yani PHP 5.2 bu özelliği kullanmak için çalıştı, ki:

$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);

Bu hata mesajı almak istiyorum:

Use of undefined constant PHP_ROUND_HALF_DOWN - assumed 'PHP_ROUND_HALF_DOWN' Warning (2): Wrong parameter count for round()

Sonrası değişkenleri kullanmanın doğru yolu

<?php

$department = $_POST['department'];

?>

Tek tırnak kullanın (')

Orada kod ateşleyici kullanıyorum herhangi bir fark ve i adları için "" kullanın ve o inşaat büyük emin değilim.

$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"]);

Saygılarımızla,

Jorge.