我将网址上的值传递到我网站上的某个页面。因此,当用户单击链接时,不同的值将传递到新页面,具体取决于他们单击的链接。我在第二页上使用条件来改变运行的代码,具体取决于$ _GET中的值。
不幸的是,由于我不了解的原因,条件似乎没有正常工作。在if语句中,我正在使用||因为有多个传递的值需要在第二页上触发相同的代码(它们需要以不同的方式命名,因为它们也都会触发唯一的代码)。
看起来很简单,我从:
开始if($_GET['id']=('x' || 'y' || 'z')) {
block of code
}elseif($_GET['id']=('a' || 'b' || 'c')) {
block of code
}else{
block of code
}
我已打印出$ _GET ['id']的值,以根据点击的链接检查正确的值是从第一页传递到第二页。这工作正常。我点击的每个链接都会打印出预期值。奇怪的是,我在第一个条件和第一条件之上回显了这些值。它打印在两种情况下,即使它打印的值不应该触发该条件。有什么想法吗?
答案 0 :(得分:3)
用于检查$_GET['id']
是否是集合中有效值之一的语法是错误的。
我认为你的意思是做更像这样的事情:
<?php
if (in_array($_GET['id'], array('x', 'y', 'z') {
/* block 1*/
}
else if (in_array($_GET['id'], array('a', 'b', 'c')) {
/* block 2 */
}
else {
/* block 3 */
}
有关您所做的代码的更多信息:
它正在传递,因为语法有效,但不适合您想要做的事情。
基本上,您说“将$_GET['id']
分配给truthy
,'a'
或'b'
的第一个'c'
值。”问题在于,所有字符串(除非它们都是“0”)都被评估为真。
此外,单个等号符号(=
)将值赋给变量并计算为true(赋值成功)。因此,您始终将$_GET['id']
设置为('a' || 'b' || 'c')
中的第一个字符串。因此,您要分配$_GET['id']
并评估true
,以便始终满足第一个if条件。
答案 1 :(得分:1)
if($_GET['id'] == 'x' || $_GET['id'] == 'y' || $_GET['id'] == 'z') {
block of code
}elseif($_GET['id'] == 'a' || $_GET['id'] == 'b' || $_GET['id'] == 'c') {
block of code
}else{
block of code
}
答案 2 :(得分:1)
我认为你也可以使用switch语句。如下所示
$value = 'x'; // $_GET['id']
switch($value) {
//matches if one or more case is met
case 'x':
case 'y':
case 'z':
echo 'i am x, y or z';//here your block code
break;
//matches if one or more case is met
case 'a':
case 'b':
case 'c':
echo 'i am x, y or z';//here your block code
break;
default:
echo 'I have no value';
}