2009-11-23 116 views
2

我們正在嘗試使用下面的代碼PHP if或語句不工作

if (($_GET['1'] != "1") || ($_GET['1'] != "2")) { 

當我們嘗試這個無論什麼價值的變量將輸入數據,即使是TRUE那是假的。當我們使用

if (($_GET['1'] == "1") || ($_GET['1'] == "2")) { 

,並把數據,這將使它返回false它工作正常。我們已經改變了if語句的方式,以便我們可以得到這個工作,但我想知道爲什麼這不起作用,如果它是在做錯誤的東西或在php內與or和不等於運算符的限制

感謝

回答

6

你的第一個考驗就是這樣說:

如果$_GET['1']名不是"1"$_GET['1']是什麼除了"2"

表達,永遠傳承:如果它等於1它會通過!= '2'測試你的if語句下半年。如果它等於2它將在上半場通過!= '1'測試,並且從未進入測試的後半部分。

第二次測試只是說:

如果$_GET['1']等於"1" OR $_GET['1']等於"2"則表達式應該傳遞

你可能想這個表達,這隻會通過,如果沒有參數保存正確的值:

if(($_GET['1'] != '1') && ($_GET['1'] != '2')) 
+0

啊這一切都有道理,謝謝:) – kwhohasamullet 2009-11-23 06:55:19

0

如果你的代碼是:

if (($_GET['1'] != "1") || ($_GET['2'] != "2")) { 

任何值,甚至空值也能進入這個狀態。你可以改變||到& &意義不等於任何字符爲「1」和「2」可以輸入你調理

1

下面的表達式總是會計算爲TRUE,因爲x不是1或x不是2. x不能同時等於1和2!

($x != 1) || ($x != 2) 

($x == 1) || ($x == 2) 

相反的是

($x != 1) && ($x != 2) 

注意,你必須改變||到& &。

0

不知道該聲明的意圖,或者你開始使用什麼輸入(或者如何修改它),我不能確定問題是什麼。

這就是說,第一條語句將只計算爲FALSE如果$_GET['1']等於1 $_GET['2']等於2

第二條語句將只計算爲FALSE如果$_GET['1']不等於1和$_GET['2']是不等於2

我猜你想在你的第一條語句是什麼

if (($_GET['1'] != "1") && ($_GET['2'] != "2")) {

其中EVA luates到FALSE除非$_GET['1']等於1和$_GET['2']等於2

0

嘗試:!

如果(($ _GET [ '1'] = 「1」)& &($ _GET ['2 ']!=「2」)){

如果在兩個語句中都使用!=,則需要使用& &而不是||。以確保兩個語句得到評估。

本質上,使用||意味着第一條語句會被評估,如果它是false,那麼PHP會忽略第二條語句,因爲您使用的是OR。但是如果你使用& &,那麼PHP將確定評估兩個!=語句。