2009-12-14 57 views
7

如何獲取URL參數& Coldfusion中的值? 防爆: -如何在Coldfusion中獲取URL參數和值?

我的網址是

test.cfm?par1=val1&par2=val2&par3=val3 

是否有可能直接獲得的第二個參數和它的價值呢?

<cfset param='#url.par2#'>我能得到PAR2, 的價值,但我的參數dynamicically從其他網頁產生並傳遞到這裏(PAR2可能是下一次ABC2,XYZ2等) 因此,我認爲更好的辦法是讓參數和值在第二個Possition(Possition不會總是改變)。

任何想法我怎樣才能得到它?

在此先感謝

回答

5
<cfset Param2 = ListGetAt(CGI.QUERY_STRING,2,"&")> 
+2

我不知道您是否可以依賴CGI.QUERY_STRING中始終保持相同順序的URL參數。 – ale 2009-12-15 04:43:10

+4

這是錯誤的,因爲它不會URL解碼值。 – Tomalak 2009-12-15 09:38:23

+0

@Tomalak我會說整個方法都是錯誤的,但如果他們想要的話 - 他們會得到它。 – Sergii 2009-12-15 09:53:28

5

訂單查詢字符串變量的不相關,或者您的應用程序不應該指望它是相關的。我認爲你最好的選擇是讓另一個變量是順序中的變量列表。像這樣:

test.cfm?par1=val1&par2=val2&par3=val3&list=var1,var2,var3 

注意新變量「list」的存在。

因此,您首先獲取「list」的值,然後將其作爲第二個條目「var2」並引用到URL範圍中。你可以很容易地抽象出所有這些,所以變量名稱本身不重要。良好的錯誤處理將是必要的,以防止錯過期望。

+0

嗯,這是一個很好的解決方案,但我正在尋找是否有可能直接獲得第二個參數及其值,而不是獲取列表並獲取其第二個元素。 – CFUser 2009-12-14 23:10:13

+1

這是唯一的部落方式來做到這一點。 +1 – Tomalak 2009-12-15 09:42:45

+0

@Tomalak什麼家族? :) – Kip 2009-12-15 13:59:20

1
<cfscript> 
    par2=getToken(cgi.query_string,2,"&"); // contains "par2=val2" 
    par2name=getToken(par2,1,"="); // contains "par2" 
    par2value=urlDecode(getToken(par2,2,"=")); // contains "val2" 
</cfscript> 

您也可以使用listGetAt功能,這基本上等同於爲gettoken,略有不同的語法。

+1

這是錯誤的,因爲它不會URL解碼值。 – Tomalak 2009-12-15 09:39:11

+0

不夠公平,加入了url解碼。 – davidcl 2009-12-15 18:30:38

21

您也可以訪問url範圍爲結構,這樣你就可以得到:

<cfset param2 = url['param2'] /> 

這是有用的,如果你可能有一堆字段的命名約定。假設你正在收集姓名和電子郵件,像這樣:

[email protected]&name1=Fred&[email protected]&name2=Sally 

你可以寫類似:

<cfloop condition="someCondition"> 
    <cfset email = url['email' & i] /> 
    <cfset name = url['name' & i] /> 
    <!--- Do something ---> 
    <cfset i++ /> 
</cfloop> 
3

得到的PARAMS可以使用structKeyList(URL)或structKeyArray(URL)列表,然後通過URL的範圍,想#URL [「PAR1」]#訪問這些參數

<cfset params = structKeyList(url) /> 
<cfdump label="parameters" var="#params#" /> 

<cfloop index="ix" list="#params#"> 
    <cfoutput><div>#ix# = #url[ix]#</div></cfoutput> 
</cfloop> 

如其他人所說的,你真的不應該依賴參數

的順序