我们正在尝试使用下面的代码
if (($_GET['1'] != "1") || ($_GET['1'] != "2")) {
当我们尝试这个时,无论变量具有什么值,即使输入的数据为false,它也会评估为true。当我们使用
时if (($_GET['1'] == "1") || ($_GET['1'] == "2")) {
并输入将使其返回false的数据,它可以正常工作。我们已经改变了if语句的方式,所以我们可以使这个工作,但我想知道为什么这不起作用,如果它是我做错了或在php中与or和不等运算符的限制
由于
答案 0 :(得分:8)
你的第一个测试就是这样说:
如果
,那么$_GET['1']
不是"1"
,或$_GET['1']
不是"2"
表达式将始终通过:如果它等于1
,它将在if语句的后半部分通过!= '2'
测试。如果它等于2
,它将在前半部分通过!= '1'
测试,并且永远不会进入测试的后半部分。
第二项测试只是说:
如果
$_GET['1']
等于"1"
或$_GET['1']
等于"2"
,那么表达式应该通过
你可能想要这个表达式,只有当两个参数都没有正确的值时才会传递:
if(($_GET['1'] != '1') && ($_GET['1'] != '2'))
答案 1 :(得分:1)
下面的表达式总是计算为TRUE,因为x不是1或x不是2. x不能同时等于1和2!
($x != 1) || ($x != 2)
与
相反($x == 1) || ($x == 2)
是
($x != 1) && ($x != 2)
请注意,您必须更改||到&&。
答案 2 :(得分:0)
如果您的代码是:
if (($_GET['1'] != "1") || ($_GET['2'] != "2")) {
任何值或甚至空值都可以进入此条件。你可以改变||和&&意思是任何不等于“1”和“2”的字符串都可以输入你的条件
答案 3 :(得分:0)
如果不知道声明的意图,或者你开始的输入(或者你如何修改它),我无法确定问题是什么。
也就是说,如果FALSE
等于1且$_GET['1']
等于2,则第一个语句将仅评估为$_GET['2']
。
如果FALSE
不等于1且$_GET['1']
不等于2,则第二个语句仅评估为$_GET['2']
。
我猜你在第一次发言时想要的是什么
if (($_GET['1'] != "1") && ($_GET['2'] != "2")) {
除非FALSE
等于1且$_GET['1']
等于2,否则评估为$_GET['2']
。
答案 4 :(得分:0)
尝试:
if(($ _GET ['1']!=“1”)&&($ _GET ['2']!=“2”)){
如果你在两个陈述中使用!=,那么你需要使用&&而不是||确保评估两个语句。
基本上,使用||表示第一个语句被评估,如果它是false,那么PHP将忽略第二个语句,因为你正在使用OR。但是如果你使用&&,那么PHP肯定会评估两个!=语句。