2012-01-04 60 views
0

我使用了$_SESSION['user'],即用戶作爲變量來存儲用戶在SESSION數組中登錄的ID。同時,我在其他地方用$_GET['user']做了其他的事情。在PHP中使用兩個具有相同名稱的GLOBAL變量

但是,問題是,只要我使用GET數組來設置「用戶」值,我的SESSION數組的用戶值也會被覆蓋。我對此很驚訝。

代碼工作完全正常(無過寫作)在我的本地服務器,但同樣未能在自己的網站

雖然,我已經改變變量固定它,現在我很好奇,想知道的這背後的原因。

如果我不清楚我的問題,請發表評論。

這裏有代碼(根據要求發佈)。不過,我不認爲這是需要

if($_SESSION['user']!=""){ 
$user = $_GET['user']; 
$q = "select * from some_table where username='$user' order by product"; 
$a = mysql_query($q); 
$count = mysql_num_rows($a); 
if($count==0){ 
    die ("No such username exists. No credits will be deducted for wrong query."); 
    } 
    else { 
    $user_q = $_SESSION['user']; 
    $val = 10; 
    $query2 = "UPDATE some_table set user_balance=user_balance-'$val' where username='$user_q'"; 
    mysql_query($query2); 
    echo "<table class='tablesorter' id='myTable' style='width:600px;align:center;'><thead><tr><th align='center'>Product</th><th align='center'>Time</th><th align='center'>Credit</th><th align='center'>Modified Credits</th></tr></thead><tbody>"; 
    } 
while($array = mysql_fetch_array($a)){ 
$p = $array['product_name']; 
$c = $array['cost_incurred']; 
$t = $array['timestamp_jkj']; 
$m = $array['mod_balance_something']; 
    echo "<tr><td align='center'>$p</td><td align='center' >$t</td><td align='center'>$c</td><td align='center'>$m</td></tr>"; 
    } 
    echo "</tbody></table>"; 
} 
else { 
    echo "You need to login to see your details."; 
} 

謝謝:)

+0

這不應該發生,你應該發佈你的代碼,所以我們可以嘗試和解決它爲什麼。 – DaveRandom 2012-01-04 13:30:41

+0

但是,它爲什麼然後僅僅改變用戶到用戶1的變量名? – 2012-01-04 13:33:03

+1

沒有看到你的代碼,我不知道。 – DaveRandom 2012-01-04 13:33:51

回答

5

我猜你的register_globals的設置打開。瞭解更多關於在這裏:​​http://en.wikibooks.org/wiki/PHP_Programming/Register_Globals

+3

+1 - 但是您應該添加「並且應該關閉它」。 :-) – FtDRbwLXw6 2012-01-04 14:04:47

+0

@drrcknlsn事實上,這是一個邪惡的設置,並且現在也不推薦使用 – 2012-01-04 14:18:44

+0

+1非常好的評論。我也喜歡@drrcknlsn的評論:) – 2012-01-04 14:25:02

3

我真的很喜歡您的評論:「我添加的代碼找出來。」 @DaveRandom

檢查register_globals的設置。

謝謝:)

相關問題