2010-06-06 71 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語句。