1

我有下面的代码块,它运行查询并检查现有记录,如果没有找到记录,则运行第二个插入查询。

<cffunction name="EndRequestFunc" access="public" returnType="string">
   <!---Queries Table To Get Requested Record--->
    <cfquery name="qryGetPageRecord" datasource="First_Main_Dev"   
    dbname="First_Services_Dev">
    SELECT pageName 
    FROM tblCFMPageRequest
    WHERE pageName = '#CGI.HTTP_REFERER#' AND scriptName = 
    '#CGI.SCRIPT_NAME#'
    </cfquery>
    <!---Conditional Check for record count equal to 0--->
    <cfif qryGetPageRecord.recordCount eq 0>
    <!---If record count equal to 0, recordset query executed--->
    <cfquery name="setNewRecord" datasource="First_Main_Dev" 
    dbname="First_Services_Dev">
    INSERT INTO tblCFMPageRequest
    VALUES ('#CGI.HTTP_REFERER#', '#CGI.SCRIPT_NAME#')
    </cfquery>
    </cfif>
    </cffunction>

我需要做的是剥离所有格式的两个 CGI 变量的值,这样像“example.com/portal/mypage.cfm”这样的值将被剥离 http 和其他所有内容,只剩下mypage.cfm之前它由查询插入。任何指导将不胜感激。

更新:感谢给出的建议,我能够使用 ListLast 函数消除 URL 的http://example.com/部分。我是短视的,因为我不记得我的网址在“cfm”点之后需要删除的字符。这是我从 ListLast 获得的实际结果之一:client_modify.cfm?uid=248&al=1&a_trigger=1。

我已经尝试在 Coldfusion 中使用其他一些 List 函数,但至今无济于事。关于如何消除以下粗体部分的任何建议: client_modify.cfm ?uid=248&al=1&a_trigger=1所以我只剩下一个干净的 client_modify.cfm

4

2 回答 2

4

使用ListLast()函数 with/作为分隔符。此外,始终尝试使用cfqueryparam将值放入查询中。像这样。

<cfquery name="setNewRecord" datasource="First_Main_Dev" bname="First_Services_Dev">
    INSERT INTO tblCFMPageRequest
    VALUES (<cfqueryparam cfsqltype="cf_sql_varchar" value="#ListLast(CGI.HTTP_REFERER,'/')#">, <cfqueryparam cfsqltype="cf_sql_varchar" value="#ListLast(CGI.SCRIPT_NAME,'/')#">)
</cfquery>
于 2015-05-05T20:03:39.887 回答
3

CGI 变量不应该有任何“格式”,所以你的问题有点令人困惑。

如果您只是想获取字符串末尾的文件名,则可以使用列表函数。

fileIwant = ListLast(CGI.SCRIPT_NAME,"/");

如果CGI.SCRIPT_NAME/wwwroot/example/index.cfmfileIwant将导致index.cfm

请注意引荐来源网址,因为它可能未定义并且解析它会引发错误。

于 2015-05-05T19:55:59.250 回答