2009-11-23 84 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将确定评估两个!=语句。