我有一个带有多个复选框的动态表单,在提交时我想只使用更改状态的复选框值CFSTOREDPROC
在另一个表单中运行。cfloop
到目前为止,下面是一个我正在尝试测试的粗略概念,但我确信我创建数组的方式会有问题。如果有人可以就可能的解决方案提供反馈,我将不胜感激。
HTML/CF 表格:
<form action="self.cfm" method="post" name="permissions">
<input type="hidden" name="User_ID" value="<CFOUTPUT>#User_ID#</CFOUTPUT>">
<table>
<CFLOOP QUERY="getNthPermission">
<tr><td>#getNthPermission.Permission_Name#</td><td><input type="checkbox" value="#getNthPermission.Permission_ID#" name="#getNthPermission.Permission_Name#" <CFIF LISTVALUECOUNT(VARIABLES.UserPermission_ID_List,getNthPermission.Permission_ID) NEQ 0>CHECKED</CFIF>></td></tr>
</CFLOOP>
</table>
<input type="submit" name="submit" value="Update">
</form>
冷熔作用:
<CFSET VARIABLES.Permission_ID_List = ValueList(getUserPermission.Permission_ID)>
<cfset changed_permissions=ArrayNew()>
<CFLOOP QUERY="getNthPermission">
//If it was checked when the form was created but was unchecked by the user add it to my array.
<CFIF LISTVALUECOUNT(VARIABLES.UserPermission_ID_List,getNthPermission.Permission_ID) NEQ 0 AND !IsDefined(FORM.#getNthPermission.Permission_Name#)>
<cfset changed_permissions[getNthPermission.Permission_ID]>
<CFELSEIF LISTVALUECOUNT(VARIABLES.UserPermission_ID_List,getNthPermission.Permission_ID) EQ 0 AND IsDefined(FORM.#getNthPermission.Permission_Name#)>
//If it wasn't checked when the form was built but was checked by the user add it to my array.
<cfset changed_permissions[getNthPermission.Permission_ID]>
</CFIF>
</CFLOOP>
//现在循环遍历刚刚创建的数组并将存储过程传递给我的值
<CFLOOP from="1" to="#arrayLen(changed_permissions)#" index="i">
<CFSTOREDPROC DATASOURCE="#MYDB_DSN#" PROCEDURE="Update_UserPermission">
<CFPROCPARAM DBVARNAME="@PermissionList" VALUE="#changed_permissions[i]#" TYPE="IN" CFSQLTYPE="cf_sql_longvarchar">
<CFPROCPARAM DBVARNAME="@User_ID" VALUE="#FORM.User_ID#" CFSQLTYPE="cf_sql_integer">
</CFSTOREDPROC>
</CFLOOP>
更新:
我正在使用我不参与设置的数据库配置,其中包含以下表:
- 权限表 (permission_name, ID) -权限列表
- 用户表(用户名,ID)
- User_Permissions 表(Permissions_ID、User_ID)-包含用户有权访问的每个权限的条目。
因此,当复选框被选中/取消选中时,我要么添加一个新条目,要么删除一个。已经存在的存储过程会执行(或者我希望它会执行)。