Hata iletisi, PHP'nin bilinmeyen bir belirteci aynı adda sabit bir dize olarak dolaylı olarak bildireceği talihsiz gerçeğinden kaynaklanmaktadır.
Yani, bunu yorumlamaya çalışıyor (eksik alıntı işaretlerini not edin):
$_POST[department]
Bunun PHP'de geçerli sözdizimi olabilmesinin tek geçerli yolu, önceden department
tanımlanmış bir sabit olmasıydı . Ne yazık ki, bu noktada Ölümcül bir hata ile ölmek yerine, bu Bildirimi yayınlar ve aynı ad ve değerle bir sabit tanımlanmış gibi davranır:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Bu hata iletisini almanın çeşitli yolları vardır, ancak hepsinin aynı kök nedeni vardır - sabit olabilecek bir belirteç .
Tırnaklar eksik tırnaklar: $my_array[bad_key]
Sizin durumunuzdaki sorun budur ve alıntılanmamış dizi dizisi anahtarlarına sahip olmanızdır. Dize anahtarlarını düzeltmek hatayı düzeltir:
Değişiklik:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
Kime:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
Değişken eksik dolar işareti: var_without_dollar
Bu hata iletisini görmenizin başka bir nedeni $
, bir değişkenden veya $this->
üyeden ayrılmanızdır . Örneğin, aşağıdakilerden biri benzer bir hata iletisine neden olur:
my_local; // should be $my_local
my_member; // should be $this->my_member
Değişken adında geçersiz karakter: $bad-variable-name
Değişken adında izin verilmeyen bir karakter kullanmaya çalışırsanız benzer ancak daha ince bir sorun ortaya çıkabilir - -
alt çizgi yerine tire ( ) _
yaygın bir durumdur.
Örneğin, değişken adlarında alt çizgilere izin verildiğinden bu sorun olmaz :
if (123 === $my_var) {
do_something();
}
Ama bu değil:
if (123 === $my-var) {
do_something();
}
Şununla aynı yorumlanacaktır:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Sınıf kapsamını belirtmeden sınıf sabitine başvurma
Bir sınıf sabitine başvurmak için sınıf kapsamını belirtmeniz gerekir ::
, bunu kaçırırsanız PHP bir küresel hakkında konuştuğunuzu düşünecektir define()
.
Örneğin:
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'nin bu sürümünde tanımlı olmayan veya kurulu olmayan bir uzantıda tanımlı bir sabit kullanma
Sadece örneğin, PHP yeni sürümlerinde mod seçeneği sabitleri var bazı sistem tanımlı sabitleri vardır round()
gibi PHP_ROUND_HALF_DOWN
PHP 5.3 veya daha sonra mevcut sadece.
PHP 5.2'de bu özelliği kullanmaya çalıştıysanız, şunu söyleyin:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Bu hata mesajını alırsınız:
Tanımlanmamış sabit PHP_ROUND_HALF_DOWN kullanımı - 'PHP_ROUND_HALF_DOWN' kabul edildi Uyarı (2): round () için yanlış parametre sayısı