【问题标题】:URL Redirection basis of category name类别名称的 URL 重定向基础
【发布时间】:2014-10-08 00:05:42
【问题描述】:

我正在开发 Coldfusion 应用程序并使用 IIS URL 重写。 URL重写将我的URLhttp://www.test.com/viewcategory/1重写为http://www.test.com/viewcategory.cfm?category=1。它运行良好,并根据 categoryid 打开带有类别详细信息的网页。

我再次将我的 URL http://www.test.com/viewcategory/categoryname 重写为 http://www.test.com/viewcategory.cfm?category=categoryname 并且我想根据类别名称打开类别详细信息页面 但不想更改我的代码 即根据以下内容获取详细信息类别标识。在coldfusion中有什么方法可以在内部根据categoryname获取category的id,并显示上面http://www.test.com/viewcategory.cfm?category=categoryname的页面。

谢谢,
阿伦

【问题讨论】:

  • 您可以根据类别名称查询数据库中的类别ID = select id from category where categoryName = 'moo'
  • 为了安全起见,您可能需要在数据库级别做一些事情来确保您的类别名称是唯一的。
  • 同意...您还应该进行某种逻辑检查,以确保在传递类别名称时返回记录。

标签: coldfusion url-rewriting


【解决方案1】:
<cfquery name="getCat" datasource="#request.dsn#">
  select * from Categories
   where CategoryName=<cfqueryparam value="#url.category#" cfsqltype="CF_SQL_VARCHAR">
</cfquery>

正如其中一位 cmets 指出的那样,您需要确保类别名称是唯一的,或者您可以像某些网站一样包含 viewcategory/Apples/1、viewcategory/Bananas/2 等数字,然后您可以重写url 传递 ID,或使用您当前的方案,您可以使用 Bananas_1、Apples_2 等 url,然后:

<cfset url.cID = val(listlast(url.category,"_"))>
<cfquery name="getCat" datasource="#request.dsn#">
  select * from Categories
   where CategoryID=<cfqueryparam value="#url.cid#" cfsqltype="CF_SQL_INTEGER">
</cfquery>

编辑:此外,您可以这样做以防止错误的 url 具有不匹配的类别名称和数字 ID(假设用户在复制 url 时错过了最后一位),尽管这不是大多数网站关心的问题。

<cfset url.cID = val(listlast(url.category,"_"))>
<cfset url.category = listDeleteAt(url.category,listlen(url.category,"_"),"_")>
<!--- I chose not to use listfirst above in case your category name includes underscores --->
<cfquery name="getCat" datasource="#request.dsn#">
  select * from Categories
   where CategoryID=<cfqueryparam value="#url.cid#" cfsqltype="CF_SQL_INTEGER">
     and CategoryName=<cfqueryparam value="#url.category#" cfsqltype="CF_SQL_VARCHAR">
</cfquery>

编辑:对正确的字段名称和表名称进行细微更改后,这些查询将起作用,但正如我对答案的评论指出的那样,您应该列出要检索的列,而不是使用 *.默认使用 * 是一个坏习惯。

【讨论】:

  • 如果用户将 url 更改为viewcategory/apples/6 会发生什么?另外......永远不要推荐使用SELECT * FROM...,你应该列出你需要的列。
  • 用户可以搞砸网址。如果他们确实将其更改为 6,他们将获得 6 的类别。所以?如果我更改此页面 url (stackoverflow.com/questions/25306340/…) 中的数字会怎样?它变成了一个不同的问题。是的,TC 可能应该列出列名,我只是在向他提供可以安全工作的查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多