2010-06-06 41 views

回答

8

这部分将无法正常工作,你(可能)想:

$_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm" 

首先,REQUEST_URI将永远不等于任何值 - 这将有至少一个额外的/。如果您的脚本被命名为test.php,那么REQUEST_URI将至少包含/test.php(请参阅下文中可能包含的其他内容)。查看REQUEST_URI变量以了解它的结构。

另外,REQUEST_URI在这里很危险:它将包含任何其他查询字符串,因此可能会通过向URL添加任意?name=value来混淆比较。

做一个phpinfo()找到比REQUEST_URI更适合的东西,例如, SCRIPT_NAME。其次,在完成比较之前,您正在执行的“或”操作将应用于值。

你可能想是这样的:

!in_array($_SERVER['SCRIPT_NAME'], 
      array("/login.php", "/thankyou.php", "/confirm.php")) 
+0

$ name = basename($ _ SERVER ['REQUEST_URI']); $ name_array = explode('。',$ name); 是我的代码。 啊等等,所以应该是$ name_array [0]来代替。傻我。 – Sam 2010-06-06 11:03:18

+0

@Sam我想这也是一样。然而,'||'比较将不会以任何方式工作,显示的'in_array()'方法将会。或者,您必须对每个登录名执行'!='比较,谢谢,并确认。 – 2010-06-06 11:10:33

+0

啊,我明白了。感谢您的快速响应,它工作:)。 – Sam 2010-06-06 11:14:33

1

即使是这样,我想创建一个方法,这种“复杂”的条件。

方法的身体会是这个样子:

if(!condition1) 
    return false; 

if(!condition2) 
    return false; 

if(!conditionN) 
    return false; 

return true; 

编辑: 原因只是readbility,你能说出适当的条件方法和方法自理方式比一个更可读的很长的if语句。