我有一个表格,我想检查一个方框,然后从那里 记录从仅检查的记录中获取emp_id(名称="添加#cnt#")
<cfform method="post" action="approver.cfm" >
<cfoutput>
<input type="hidden" name="txtTotalRecords" value="#totalEmployees.recordcount)#">
</cfoutput>
<table >
.....
<cfoutput query="totalEmployees">
<tr >
<cfset cnt= cnt+1>
<td><cfif #approver# eq 1>Yes <cfelse>No </cfif></td>
<td><input type="checkbox" name="add#cnt#" value="yes"></td>
<td><input type="hidden" name="emp_id#cnt#" value="#emp_id#"></td>
</tr>
</cfoutput>
<cfoutput>
<input type="hidden" name="f_cnt" value="#cnt#">
</cfoutput>
</table>
<p><input type="submit" name="Submit" value="submit" ></p>
</cfform>
为了测试目的,一旦我提交表格,我最终选择记录 我会更新一张桌子。
但是一旦我提交表单,我就会收到错误: 变量form.add1未定义。
<cfloop from="1" to ="#form.f_cnt#" index="j">
<cfset emp_id =#evaluate("form.emp_id#j#")#>
<cfset add =#evaluate("form.add#j#")#>
<cfdump var=#emp_id#>
</cfloop>
<cfif emp_id neq "" and add neq "">
<cfquery name="output" datasource="phonelist">
select * from employee where emp_id=#emp_id#
</cfquery>
</cfif>
<cfdump var=#output#>
解决此问题的最佳方法是什么?
如何选择仅经过检查的记录?
我制作了http://jsfiddle.net/j65wh9hz/以便能够查看我的所有代码。
答案 0 :(得分:9)
如果未选中复选框,则不会随表单一起提交。通过执行以下操作检查其存在:
<cfloop from="1" to ="#form.f_cnt#" index="j">
<cfif structKeyExists(form, "add#j#")>
<cfset checkbox = form["add#j#"] />
<!--- do stuff --->
</cfif>
</cfif>
答案 1 :(得分:2)
为了记录,可以使用复选框。
将它们命名为具有不同值的所有相同的东西(vs将所有不同的东西命名为相同的值 - &#39;是&#39; - 正如您所做的那样。
您也不需要将变量cnt
用于这样的简单查询输出,您可以使用#currentrow#
,但这只是语义。
<cfform method="post" action="approver.cfm" >
<cfoutput>
<input type="hidden" name="txtTotalRecords" value="#totalEmployees.recordcount)#">
</cfoutput>
<table >
.....
<cfoutput query="totalEmployees">
<tr >
<cfset cnt= cnt+1>
<td><cfif #approver# eq 1>Yes <cfelse>No </cfif></td>
<!--- Changed the checkbox's name to AddBox and the value to #emp_id# --->
<td><input type="checkbox" name="AddBox" value="#emp_id#"></td>
<!--- As a tip, field names are easier to visibly read as EmpID_#cnt# or Emp_ID_#cnt# vs Emp_id#cnt#
but the this field should not be needed. --->
<td><input type="hidden" name="emp_id#cnt#" value="#emp_id#"></td>
</tr>
</cfoutput>
<cfoutput>
<!--- You can remove this hidden field --->
<input type="hidden" name="f_cnt" value="#cnt#">
</cfoutput>
</table>
<p><input type="submit" name="Submit" value="submit" ></p>
</cfform>
然后,对于formprocessing。
<!--- changing the cfloop below from <cfloop from="1" to ="#form.f_cnt#" index="j"> --->
<cfloop list="#form.AddBox#" index="j">
<!--- There's no need to use evaluat("form.#variable#"), you can use form[variable] --->
<cfset emp_id = form["emp_id#j#"]
<cfset add =#evaluate("form.add#j#")#>
<cfdump var=#emp_id#>
</cfloop>
<!--- Because this was not in the cfloop, it only processes on the last emp_id --->
<cfif emp_id neq "" and add neq "">
<cfquery name="output" datasource="phonelist">
select * from employee where emp_id=#emp_id#
</cfquery>
</cfif>
<cfdump var=#output#>
所以我们可以像这样修复它
<!--- changing the cfloop below from <cfloop from="1" to ="#form.f_cnt#" index="j"> --->
<cfloop list="#form.AddBox#" index="j">
<!--- There's no need to use evaluate("form.#variable#"), you can use form[variable] --->
<cfset emp_id = form["emp_id#j#"]
<cfset add =#evaluate("form.add#j#")#>
<cfdump var=#emp_id#>
<cfquery name="output" datasource="phonelist">
select * from employee where emp_id=#emp_id#
</cfquery>
</cfloop>
<cfdump var=#output#>
但最后,没有理由循环它,我们可以做到这一点
<cfif StructKeyExists(form,"AddBox") and len(form.addbox)>
<cfquery name="output" datasource="phonelist">
select * from employee where emp_id in (<cfqueryparam cfsqltype="cf_sql_int" value="#form.AddBox#" list="yes">)
</cfquery>
<cfdump var=#output#>
</cfif>
最后的笔记
<cfparam name="form.AddBox" default="">
导致cfif StructKeyExists通过,这就是为什么len也在那里。(这是要使用的代码)
<cfform method="post" action="approver.cfm" >
<cfoutput>
<!-- Final note, I don't think this field is needed --->
<input type="hidden" name="txtTotalRecords" value="#totalEmployees.recordcount#">
</cfoutput>
<table >
.....
<cfoutput query="totalEmployees">
<tr>
<td><cfif #approver# eq 1>Yes <cfelse>No </cfif></td>
<td><input type="checkbox" name="AddBox" value="#emp_id#"></td>
<td><!--- removed emp_id hidden field ---> </td>
</tr>
</cfoutput>
</table>
<p><input type="submit" name="Submit" value="submit" ></p>
</cfform>
也可以使用
<cfif StructKeyExists(form,"AddBox")>
<cfquery name="output" datasource="phonelist">
select * from employee where emp_id in (<cfqueryparam cfsqltype="cf_sql_integer" value="#form.AddBox#" list="yes">)
</cfquery>
<cfdump var=#output#>
</cfif>
假设您确实希望在包含审批者状态的每一行中包含数据,那么您是在正确的轨道上,您将使用类似<input type="hidden" name="Approver_#emp_id#" value="#Approver#">
的语法,然后您可以像这样引用它:
(这不是代码,只是一个例子)
<cfoutput><cfloop list="#form.addbox#" index="a">
The value of this index is #a#.<br>
The associated approver status is #form["Approver_#a#"]#
</cfloop></cfoutput>
例如,假设您希望使用此数据来制作已批准且未获批准的已检查人员列表,且值始终为0或1(对于审批者)。
<cfset Approval0 = "">
<cfset Approval1 = "">
<cfloop list="#form.addbox#" index="a">
<cfset appstatus = form["Approver_#a#"]>
<cfset variables["Approval#appstatus#"] = ListAppend(variables["Approval#appstatus#"],a)>
</cfloop>
<cfoutput>
The following employee IDs have approval status: #Approval1#<br>
The following employee IDs do not: #Approval0#
</cfoutput>
(任何非范围变量,例如Approval0和Approval1,都放在范围&#34;变量&#34;,这是允许我使用变量[&#34; Approval#appstatus#&#34; ]而不是#Evaluate(&#34; Approval#appstatus#&#34;)#)