i believe you can't 'decode' a url and still use it as a
structure and
retrieve individual keys from it...
i guess what you will have to do is:
1) decode the cgi.query_string variable
2) create a new structure
3) populate it with elements of the decoded cgi.query_string
4) use your cfparam validation on the new structure
here is a sample code that has worked for me. comments in
code:
<!--- decode the cgi.query_string and assign its new value
to a tmp
var--->
<cfset tmp = #urldecode(cgi.QUERY_STRING)#>
<!--- create new empty structure --->
<cfset tmp2 = structnew()>
<!--- loop through the tmp var as a list with '&' as
delimiters,
storing each key/value pair in a listEl item
(your listEl itimes will now consist of all xxx=yyy pairs
from your
cgi.query_string --->
<cfloop index="listEl" list="#tmp#" delimiters="&">
<cfoutput>
<!--- for each listEl item created by cfloop, create a key
and value
and insert them as key and value into the tmp2 structure
created before
--->
<cfset tmp2_key = listgetat(listEl, 1, "=")><!---
create a key var and
assign it the xxx value from the listEl --->
<cfset tmp2_val = listgetat(listEl, 2, "=")><!---
create a val var and
assign it the yyy value from the listEl --->
<cfscript>
StructInsert(tmp2, tmp2_key, tmp2_val, "true");<!--- this
cfscript
populates our tmp2 structure with all key/value pairs --->
</cfscript>
</cfoutput>
</cfloop>
<!--- debug & test : remove this from production
version --->
<cfdump var="#tmp2#"><!--- dump the new tmp2
structure --->
<!--- below i am using a isValid cf function to test that
eventID is an
integer. you will use your cfparam. isvalid just allows me to
assign
an output to evaluation that i can see --->
<cfif isvalid("integer", tmp2.eventID)>
1
<cfelse>
0
</cfif>