2010-05-14 40 views
1

所以我的這部分代碼:PHP:錯誤縮減爲一條線,不能弄明白

print_r($_SESSION['T']); 
$T = array_values($data2); 
print_r($_SESSION['T']); 

輸出這樣的:

Array ([0] => NZL) Array ([0] => ENG [1] => NZL) 

該行是第一次$ T被宣佈。據我所知,$ _SESSION ['T']應該沒有任何理由獲得參賽資格,這肯定會導致我的問題。
可能是很好地注意到,該array_values通話後,該變種$ T的樣子:

Array ([0] => ENG [1] => NZL) 

這是什麼樣的$ _SESSION第二打印[「T」]的顯示。

讓我知道,如果你能想到的任何原因這可能發生,由於

+0

我認爲這是好的「會話副作用」錯誤。等一下,我會看看我能否找到參考。 – 2010-05-14 19:24:30

回答

4

您似乎有Register Globals打開。

if (ini_get('register_globals')) { 
    die("Register Globals is ON - This is BAD"); 
} 
else { 
    die("Register Globals is OFF - This is GOOD"); 
} 

的想法是 - 與註冊全局變量 - 你可以使用一個變量$T的簡寫$_GLOBALS['T'] ...或$_GET['T']$_POST['T']或(當然)$_SESSION['T']

如果聽起來像是一個糟糕的主意,那是因爲它是(當時)並且現在已經非常不情願地被棄用,並且通常在默認情況下關閉。

1

這是一個已知的bug /副作用。詳情請參閱this question。它應該通過設置register_globals關閉來排序。

1

這可能是因爲你有register_globals設置爲on(這是絕對可怕的)。 (請參閱http://www.php.net/manual/en/security.globals.php

您應該禁用註冊全局變量,以便SESSION/POST/GET/REQUEST/COOKIE變量不會發生干擾。