我有一个动态表单,有多个复选框,并提交我想运行一个CFSTOREDPROC
在另一个cfloop
只使用改变状态的复选框值。Coldfusion从动态表单复选框创建数组
到目前为止,下面是一个粗略的概念,我试图测试,但我确信我创建我的数组的方式会有问题。如果任何人都可以提供可能的解决方案的反馈,我会感激。
HTML/CF FORM:
<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>
COLDFUSION ACTION:
<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) - 权限名单
- 用户表(USER_NAME ,ID)
- User_Permissions表(Permissions_ID,User_ID) - 包含用户有权访问的每个权限的条目。
因此,作为复选框被选中/未选中我需要添加新条目或删除一个。哪一个已经存在的存储过程(或者我希望它存在)。
它只是一组可以分配/取消分配给单个用户的权限吗?如果没有涉及到实际值的样本,那么很难直观地看到*精确*关系。另外,这些权限如何存储在数据库中,单独的行或作为csv列表(希望不是)? – Leigh
不幸的是,我正在使用一个数据库配置,而我并不是设置的一部分。有一个包含权限列表(permission_name,ID)和用户表(user_name,ID)和User_Permissions表(Permissions_ID,User_ID)的表,其中包含用户有权访问的每个权限的条目。所以当复选框被选中/取消选中时,我可以添加一个新条目或删除一个。哪一个已经存在的存储过程(或者我希望它) – Denoteone