使用锚标记 运行 并显示查询

Using an anchor tag to run and display a query

我有一个查询 returns 我需要的数据,但我希望它能够通过单击页面顶部的 link 来调用。我在顶部有三个 link,前两个在单击时显示活动和非活动订单,我希望第三个仅显示当前登录用户的订单 created/reviewed。

一切似乎都独立工作(查询 returns 我从数据库中寻找什么,link 显示我想要它的位置和方式)但是 link 只是刷新当前点击时的页面。

我确定这里缺少一些简单的东西,因为我是 ColdFusion 的新手。这是我的代码 spinets,带有一个淡化的查询(因为我认为这不重要。)

查询:

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

首先,您应该设置 <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。

我发现了问题。我是这个项目的新手,现有代码在我加入时已经存在。我的查询有效(这让我很兴奋),但问题出在文件的不同部分,有一个部分实际显示了命名查询的结果。

他们设置了它,所以针对这个特定页面的每个查询都有相同的名称,有点像:

<cfquery name=qDisplayQuery>

找到这个后,我就为查询输入了相同的名称。现在,当单击 link 时,它会覆盖所有其他查询。每个 link 的作用相同,因此只有与正确的 link 关联的查询才会在单击时显示。感谢@James A Mohler, 我添加了 <cfqueryparam> 和一些参数。

感谢所有伸出援手的人,你们都是英雄