2012-08-08 170 views
0

我在比較$_SESSION變量與$_GET變量。將會話變量與獲取變量進行比較PHP

兩者都是數字:

$_SESSION['auth'] === $_GET['user'] 

如果兩個結果等於1,則前進。

由於某種原因,這不能正常工作。當使用:if $_SESSION['auth'] = 2, and $_GET['user'] = 1時,它仍然繼續。

編輯:

if(isset($_SESSION['auth'])===isset($_GET['user'])){ 
// proceeding code 
} 

有了這個,不管是什麼$ _GET變量產生時,它仍然繼續。即使我用(int)來回答下面的問題,它仍然給我相同的結果。

我曾嘗試設置$ _GET變量來測試一些字符串,這不會繼續,因爲我的$ _SESSION變量是1。它只能通過任何數字的代碼進行。

感謝

+0

錯過**如果**或許?? – 2012-08-08 04:48:05

+1

如何發佈代碼。 – Musa 2012-08-08 04:49:27

+0

您的代碼現在是無效的。如果您正在使用等於(嚴格或非嚴格)的比較,那麼您應該無法繼續執行,因爲結果是錯誤的,應該停止您的代碼塊。請張貼額外的代碼以獲得更好的幫助。 – RobB 2012-08-08 04:51:18

回答

2

當你有內部if「等於對」條件的功能,你將與比較無論那個函數返回。

所以在你的情況下,isset()返回true,如果參數設置,並且false否則。

這就是你要比較的,而不是價值。

很明顯,你需要在比較之前檢查是否設置了變量。所以先做,然後開始你的比較。像這樣:

if(isset($_SESSION['auth']) && isset($_GET['user'])){ 

    if($_SESSION['auth'] === (int)$_GET['user']) 
    // proceeding code 
    } 

} 
+0

感謝您的解釋! – hellomello 2012-08-08 05:39:36

1

任何出來的GET/POST/REQUEST超全局的類型爲字符串,即使只包含數字。如果你在SESSION中存儲了一個實際的整數,那麼你的嚴格比較(===)將失敗,因爲你正在比較一個字符串和一個int。

嘗試

$_SESSION['auth'] === (int)$_GET['user'] 

代替,或者乾脆放鬆比較==,不比較類型。

+3

他說* * *雖然繼續,這就是爲什麼我對這個問題非常困惑,因爲沒有可能的方式繼續下去。 – animuson 2012-08-08 04:48:59

1

沒有看到額外的代碼,似乎你可能會使用錯誤的比較運算符。您的條件表達式應該通過的唯一方式是在以下情況:

<?php 
$a = 2; 

if($a = 1 && $a = 5){ 
    echo 'yes'; 
}else{ 
    echo 'no'; 
} 
?> 

===的使用是對於相同的比較,兩個值和類型。請參閱comparison operators上的文檔以獲取更多參考。

更新:

看到你的代碼後,你的條件表達式通過的原因是因爲如果isset($_SESSION['auth'])結果是Trueisset($_GET['user'])True那麼它會通過和相同的,如果都是False。您的條件表達式僅檢查isset(VARIABLE)的結果,而不檢查匹配的變量。

1

要檢查如果兩個$_SESSION['auth']$_GET['user']被設置或取消,實際上沒有對它們進行比較,儘量

if(isset($_SESSION['auth']) && isset($_GET['user'])){ 
    if($_SESSION['auth'] == $_GET['user']) 
    // proceeding code 
    } 
} 
+0

不需要第二個if語句。您可以將表達式添加到主if語句中:if(isset($ _ SESSION ['auth'])&& isset($ _ GET ['user'])&& $ _SESSION ['auth'] == $ _GET [ '用戶']){'。 – RobB 2012-08-08 05:26:54