【发布时间】:2015-03-12 02:38:45
【问题描述】:
我可以显示来自 SQL 查询的复选框状态,但我无法更新它们。我使用位作为数据类型。我很确定问题出在我使用 cfif 测试复选框值的方式上。如果我将它们注释掉,我在表中的任何值都会被 cfparam 默认值覆盖,并且我会在操作页面上收到我的小确认消息。我已经尝试过 cfif、cfif isDefined 等。自上周以来我一直在阅读和研究这个问题,但似乎无法理解它。这是来自我的测试服务器的示例代码:(仅供参考,我正在使用相同的操作页面来查看和更新记录。)
<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>
马哈洛
【问题讨论】:
-
复选框应该从您的表单中返回为“打开”。无论您为变量检查设置什么值,都不能“打开”。同时抛弃 cfinput 和 cfform 并使用常规的表单和输入标签。
-
这是因为您为
cfparam语句和复选框字段使用了不同的名称。所以你没有分配默认值 - 你实际上是在创建全新的变量。名称必须匹配。 -
另外,还有很多地方可以清理/改进代码。您可能希望将其发布到 codereview 以获得一些反馈。
标签: sql checkbox coldfusion