這是一個小的輔助方法我創建的處理交換排序。只能使用你的鏈接內通過列名助手,另一種說法是定製的助手:
<a href="mypage.cfm?sortby=numb&sortorder=#swapSortOrder('numb')#">Number</a>
<cffunction name="swapSortOrder" returntype="string">
<cfargument name="column" type="string" required="true">
<cfargument name="sortByParams" type="string" required="false" default="sortby">
<cfargument name="sortOrderParams" type="string" required="false" default="sortorder">
<cfargument name="ascending" type="string" required="false" default="asc">
<cfargument name="descending" type="string" required="false" default="desc">
<cfif
!StructKeyExists(url, arguments.sortByParams)
OR !StructKeyExists(url, arguments.sortOrderParams)
OR arguments.column NEQ url[arguments.sortByParams]
OR url[arguments.sortOrderParams] eq arguments.descending
>
<cfreturn arguments.ascending>
</cfif>
<cfreturn arguments.descending>
</cffunction>
現在,我會告訴你,你的方法目前正在同列做並在一個變量訂單是EXTREMELY危險。我強烈建議你按照我的鏈接示例並將列和順序拆分爲兩個變量。
爲什麼?它使得添加安全非常容易。在鏈接引發的頁面上(在本例中爲mypage.cfm),您需要過濾sortby和sortorder變量以防止sql注入攻擊。
我通常做的是創造知道列的列表,人們可以排序,然後與它進行過濾:
<cfset _columns="numb,title,name,phone,email">
<cfif !ListFindNoCase(_columns, url.sortby)>
<cfset url.sortby = "title">
</cfif>
同樣適用於排序順序:
<cfset _order = "asc,desc">
<cfif !ListFindNoCase(_order, url.sortorder)>
<cfset url.sortorder = "asc">
</cfif>
你試過CFGRID? – Henry 2011-02-04 18:17:38
我希望你不要把#URL.sorter#直接放在你的查詢中。這是一個到SQL注入的快速途徑。 – ale 2011-02-05 03:33:27