使用定位标记运行和显示查询

时间:2019-01-14 21:08:28

标签: sql coldfusion

我有一个查询,该查询返回所需的数据,但是我希望能够通过单击页面顶部的链接来调用它。我在顶部有三个链接,单击时前两个显示活动和非活动订单,我希望第三个仅显示当前登录用户创建/查看的订单。

一切似乎都可以独立运行(查询从数据库中返回我要查找的内容,链接显示我想要的位置和方式),但是当单击当前链接时,该链接只是刷新页面。

我确定这里缺少一些简单的东西,因为我对ColdFusion非常陌生。这是我的代码尖刺,查询减少了(因为我认为这并不重要。)

查询:

<cfif structKeyExists(url,"myOrders")>
    <cfquery>
       SELECT * 
       FROM table
       WHERE processorID = #session.user.id#
    </cfquery>
</cfif>

锚标签:

<li class="active">
    <a href="websiteName.cfm?m=#url.m#&ai=1&myOrders=True">My Orders</a>
</li>

2 个答案:

答案 0 :(得分:1)

首先,您应该设置<cfparam>来定义期望的变量,它们的数据类型和默认值。

<cfparm name="url.myOrders" type="boolean" default="true">
<cfparm name="url.active" type="boolean" default="true">

接下来,您的链接将需要反映这些变量的组合。我删除了一些查询字符串参数以专注于这两个。请注意,最后两个链接不包含myOrders,第一个<cfparam>处理该查询字符串参数的默认定义。

<ul>
    <a href="websiteName.cfm?myOrders=true&active=true">My Active Orders</a>
    <a href="websiteName.cfm?myOrders=true&active=false">My Inactive Orders</a>
    <a href="websiteName.cfm?active=true">All Active Orders</a>
    <a href="websiteName.cfm?active=false">All Inactive Orders</a>
</ul>

最后,您可以基于这两个变量动态生成SQL。

<cfquery>
    SELECT * 
    FROM table
    WHERE 
        orderStatus = <cfqueryparam value="#url.active#" cfsqltype="cf_sql_bit">
        <cfif url.myOrders>
            AND processorID = <cfqueryparam value="#session.user.id#" cfsqltype="cf_sql_integer">
        </cfif>
</cfquery>

<cfqueryparam>标记可防止SQL注入攻击。您可以根据需要添加更多变量,以更改所需的SQL。

答案 1 :(得分:1)

我发现了问题。我是这个项目的新手,而当我开始时,现有的代码就已经存在了。我的查询工作正常(对此感到很兴奋),但问题出在文件的不同部分,其中有一部分实际显示了命名查询的结果。

他们进行了设置,因此针对该特定页面的每个查询都具有相同的名称,例如:

rnorm()

一旦找到这个,我就为查询输入相同的名称。现在,单击链接时,它将遍历所有其他查询。而且每个链接都执行相同的操作,因此在单击时仅显示与正确链接关联的查询。并感谢@James A Mohler, 我为<cfquery name=qDisplayQuery> 添加了一些参数。

谢谢大家在这里伸出援手,你们是英雄。