Как я могу отсортировать запрос ColdFusion назад и вперед по ссылке? - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть страница ColdFusion, которая отображает данные из базы данных SQL в таблицу. В заголовке таблицы у меня есть ссылки для сортировки данных в столбце. Проблема в том, что я могу отсортировать данные только одним способом: по возрастанию или по убыванию, в зависимости от того, как я жестко запрограммировал эти действия.

Вот как я настраиваю свои ссылки (с запросом, настроенным на прием сортировки):

<a href="mypage.cfm?sorter=numb ASC">Number</a>

Какой простой способ сделать так, чтобы он переключался между ASC и DESC, поэтому, если он уже отсортирован по ASC, то сортировка по DESC и наоборот?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

Это маленький вспомогательный метод, который я создал, который обрабатывает обмен сортировкой.чтобы использовать просто передать имя столбца помощнику в вашей ссылке, другой аргумент предназначен для настройки помощника:

<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>

Теперь я расскажу вам об этом, как вы делаете это в настоящее время сстолбец и порядок в одной переменной ЧРЕЗВЫЧАЙНО опасны.я настоятельно рекомендую вам следовать моему примеру с ссылками и разбить столбец и порядок на две переменные.

почему?это делает добавление безопасности очень простым.на странице, на которую ссылается ссылка (в данном случае 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>
2 голосов
/ 04 февраля 2011

Вы можете сделать что-то вроде следующего:

<cfparam name="sortOrder" type="string" default="ASC">

<a href="mypage.cfm?sortColumn=numb&sortOrder=#iif(sortOrder eq "DESC", "'ASC'", "'DESC'"#">Number</a>
...