使用复选框值更新SQL

使用复选框值更新SQL,sql,checkbox,coldfusion,Sql,Checkbox,Coldfusion,我可以显示SQL查询中的复选框状态,但无法更新它们。我使用bit作为数据类型。我很确定问题出在我使用cfif测试复选框值的方式上。如果我把它们注释掉,表中的任何值都会被cfparam默认值覆盖,我会在操作页面上收到一条确认消息。我试过cfif,cfif是定义的,等等。从上周开始我就一直在阅读和研究这个问题,只是我似乎无法理解它。以下是来自我的测试服务器的示例代码:仅供参考,我正在使用相同的操作页面查看和更新记录 <cfif isDefined ("form.update")> &l

我可以显示SQL查询中的复选框状态,但无法更新它们。我使用bit作为数据类型。我很确定问题出在我使用cfif测试复选框值的方式上。如果我把它们注释掉,表中的任何值都会被cfparam默认值覆盖,我会在操作页面上收到一条确认消息。我试过cfif,cfif是定义的,等等。从上周开始我就一直在阅读和研究这个问题,只是我似乎无法理解它。以下是来自我的测试服务器的示例代码:仅供参考,我正在使用相同的操作页面查看和更新记录

<cfif isDefined ("form.update")>

<cfparam name="checkbox1" default=0>
<cfparam name="checkbox2" default=0>
<cfparam name="checkbox3" default=0>
<cfparam name="checkbox4" default=0>


<cfif #form.chkbox1# EQ checked>
<cfset checkbox1=1>
</cfif>

<cfif IsDefined (form.chkbox2)>
<cfset checkbox2=1>
</cfif>

<!--- <cfif IsDefined (form.chkbox3)>
<cfset checkbox3=1>
</cfif>

<cfif IsDefined (form.chkbox4)>
<cfset checkbox4=1>
</cfif> --->

<cfquery name="update" datasource="HHSCIntra">

    UPDATE tbl_checkbox
    SET chkbox1 = #checkbox1#, chkbox2=#checkbox2#, chkbox3=#checkbox3#, chkbox4=#checkbox4#
    WHERE RecID = #user#

</cfquery>

<cfoutput>Record number: #user# Updated.</cfoutput>

<cfelse>

<cfquery name="checkboxview" datasource="HHSCIntra">

    SELECT * FROM tbl_checkbox WHERE RecID = #form.nameselect#

</cfquery>

<cfif #checkboxview.chkbox1# EQ 1>
<cfset chkbox1checked="yes">
<cfelse>
<cfset chkbox1checked="no">
</cfif>

<cfif #checkboxview.chkbox2# EQ 1>
<cfset chkbox2checked="yes">
<cfelse>
<cfset chkbox2checked="no">
</cfif>

<cfif #checkboxview.chkbox3# EQ 1>
<cfset chkbox3checked="yes">
<cfelse>
<cfset chkbox3checked="no">
</cfif>

<cfif #checkboxview.chkbox4# EQ 1>
<cfset chkbox4checked="yes">
<cfelse>
<cfset chkbox4checked="no">
</cfif>

<cfform action="checkboxaction.cfm" method="post">

<cfoutput query="checkboxview">#name#</cfoutput>

<cfinput name="user" type="hidden" value="#checkboxview.RecID#"><br>


        Checkbox 1: <cfinput type="checkbox" name="chkbox1" checked="#chkbox1checked#" value=1><br>
        Checkbox 2: <cfinput type="checkbox" name="chkbox2" checked="#chkbox2checked#" value=1><br>
        Checkbox 3: <cfinput type="checkbox" name="chkbox3" checked="#chkbox3checked#" value=1><br>
        Checkbox 4: <cfinput type="checkbox" name="chkbox4" checked="#chkbox4checked#" value=1><br>

<br>

<cfinput type="submit" name="update" value="Update">

</cfform>

</cfif>

Mahalo

我倾向于使用cfparam,如:

<cfparam name="form.chkbox1" default="0" overwrite="false" />
然后在cfquery中使用变量的值:

SET chkbox1 = <cfqueryparam value="#form.chkbox1#" cfsqltype="CF_SQL_BIT" />

如果选中,视图将该值设置为1。如果未选中该复选框,则不会将其传递到表单范围。

该复选框应该从表单返回为on。无论您为选中的变量设置了什么值,都不能启用。也不要使用cfinput和cfform,而是使用常规的form和input标记。这是因为您的cfparam语句和复选框字段使用了不同的名称。因此,您不是在指定默认值,而是在创建全新的变量。名称必须匹配。此外,还有许多地方可以清理/改进代码。您可能想发布它以获得一些反馈。编辑商定的范围变量。尽管每次获取默认值的原因是因为输入字段的名称与cfparam语句中使用的名称不匹配,即chkbox1与checkbox1+1用于范围界定和cfqueryparam。谢谢,尝试让Steve的答案生效,但是cold fusion在cfparam标签上抛出了各种错误。标记CFPARAM的属性验证错误。它不允许属性值。有效属性为默认值、最大值、最小值、名称、模式、类型。测试服务器是ColdFusion 9,这些属性在9中不受支持吗?还对cfsqltype属性抛出了错误。它在视图上抛出错误,不确定为什么这样做,因为所有代码都嵌套在cfif isDefined form.update标记中。当我单击View时,不应该跳过所有这些代码吗?Mahalo。这很有效:我是不是误解了Steve的回答?我想部分地,我回答了我关于cfif标签中代码的问题。显然,当页面打开时,ColdFusion会检查页面上的代码,而不管它是否正在执行。我还有一个问题。为此,生产应用程序使用cfinsert和cfupdates,而不是cfquery。这些复选框只是对现有应用程序的添加。我应该尝试将复选框合并到现有的cfupdate和cfinsert中,还是在cfquery中单独处理它们?Mahalot再看看Steve的例子。它不为cfparam语句使用值。您可能混淆了cfparam和cfqueryparam。两者完全不同。用于保护数据库查询不受sql注入的影响。看起来你可能是CF的新手。如果是的话,我建议你先阅读。还有一些很好的介绍网站,比如。