ColdFusion和AJAX - 更新数据库

时间:2014-10-13 18:31:12

标签: javascript jquery ajax coldfusion

我想要设置一个系统,用户可以转到一个页面,其中有一个项目列表,可以从下拉列表中对它们进行评级(例如,1到5)。这个列表将会变得很长,因此如果他们可以通过并对每个项目进行排名而不必点击“保存”将更加方便。

对于AJAX,我是非常非常新手,但我认为这不是那个很难。我发现我认为an answer in a different discussion非常重要,但它没有提供足够的信息让我知道如何处理它。

简而言之,我如何使用与jQuery和ColdFusion一致的AJAX来更新数据库而无需保存/提交按钮?

澄清:我应该澄清一下,用户可以对项目进行评分 - 而非排名。这意味着没有#1,#2,#3等。相反,每个项目的评级均为1-5。

目前,当用户在下拉列表中进行选择时,我将基于“.change()”的所有内容。此时我有两个jQuery变量,它们被设置为项目的“ID”以及新的“评级”。我只需要找到一种方法来使用这两个变量来更新数据库中的表。

更新

在主页面上,我现在有一个简单的jQuery AJAX帖子调用:$.post('update.cfc', {ID: inputID, rating: selRat}),它被触发.onChange()。 “inputID”是我要在数据库中更新的条目的ID,“selRat”是下拉列表中的选定评级。

<cfcomponent output="false">
<cffunction name="updateRating" access="remote" output="false">

    <cfupdate datasource="#session.db#" name="update">
        UPDATE ajaxTest
        SET rating = #FORM.rating#
        WHERE ID = #FORM.ID#
    </cfupdate>

</cffunction>
</cfcomponent>

我目前正在获得500 (Internal Server Error)

思想/建议?

1 个答案:

答案 0 :(得分:3)

您是否尝试过向此表单提交传统方式以了解会发生什么?您还可以添加一些简单的调试,例如写入文件以记录执行的尝试吗?

有一件事对我来说很突出:<cfupdate开始和结束标记应该是<cfquery我不使用cfupdate或cfinsert,但我不认为任何cf flavor支持你的语法'试图使用,这让我相信这是一个容易犯的错误。

另一方面,该查询可能特别危险,很抱歉切断正确...

如果我提交了“0; DROP TABLE Users”作为ID的值,则您的Users表将消失(如果您有users表)。我还可以传递其他常用的表名,如成员,新闻,页面,内容,CMS,交易。 (我不会这样做,但你永远不知道其他用户何时会这样做。)

有一个非常简单的解决方案,<cfqueryparam>。我会让你研究标签,但我会告诉你如何改变那个特定的查询。

<cfquery datasource="#session.db#" name="update">
    UPDATE ajaxTest
    SET rating = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.rating#">
    WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.id#">
</cfquery>

CFQUERYPARAMing你的变量可以避免这种风险,并将变量值作为文本而不是sql传递。