验证动态复选框
Validate dynamic checkbox
我在数据库中有两个 table,Table A 和 Table B。用户填写表格 A,将在 Table A 中插入新记录。在表单 B 中,Table A 中的记录称为复选框。从此表单中,数据将被插入到 Table B 中。以下代码在表单 B 中。此代码中捕获的数据将被插入到列中(假设列名是 menu_check),结果类似于 "value1,value2,value3"(取决于用户选中的复选框数量)
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#" />#qMenu.menu_name_eng#
表单 B 完成后,用户将被定向到一个页面,其中显示了 Table B 中所有记录的列表。用户可以从此 table 编辑任何记录。类似于一个简单的列表,用户可以在其中查看、更新或删除任何记录。在编辑页面中,如何调出menu_check的值,并根据该列查看是否选中了任何复选框。
例如:
- 如果menu_check中的值为'value1,value2,value3',则仅选中第一个、第二个和第三个复选框。
- 如果 menu_check 中的值为 'value1,value3',则仅选中第一个和第三个复选框。
我尝试使用定界符,但仍然无法理解,因为我不知道之后该从哪里继续。
<cfloop delimiter="," index="a" list="#queryname.menu_check#"></cfloop>
我尝试使用类似的东西;
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#" <cfif "#queryname.menu_check#" EQ "#qMenu.menu_id#">selected</cfif> /> #qMenu.menu_name_eng#
但这也没有用。我正在使用 ColdFusion9。
要选中 input[type=checkbox]
,您需要使用 checked
而不是 selected
。
由于 queryname.menu_check
的值,您可以使用 listFind(list, value [, delimiters, includeEmptyValues])
函数检查 queryname.menu_check
.
中是否存在该值
<cfset checkedstatus = "">
<cfif ListFind(queryname.menu_check, qMenu.menu_id)>
<cfset checkedstatus = " checked">
</cfif>
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#"#checkedstatus#/> #qMenu.menu_name_eng#
在循环中
<cfoutput query="qMenu">
<cfset checkedstatus = "">
<cfif ListFind(queryname.menu_check, qMenu.menu_id)>
<cfset checkedstatus = " checked">
</cfif>
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#"#checkedstatus#/> #qMenu.menu_name_eng#
</cfoutput>
扩展 , lists (and list functions) certainly help. However, I wouldn't recommend actually storing data in the database that way. Instead, use a junction or bridge table,它提供了比列表更大的灵活性和性能。
- 用户 - Table 个独立用户
- 菜单 - Table 个独特的菜单选项
- UserMenu - Table 每个用户的选定菜单选项
注意,连接点 table 将每个选择存储为单独的行。这样您就可以根据需要存储尽可能少或尽可能多的选择,并轻松更改它们。
使用该结构,编辑页面仅检索当前用户的选定选项并将这些值转换为列表。
<cfquery name="qSelectedOptions" ...>
SELECT MenuId
FROM UserMenu
WHERE UserId = <cfqueryparam value="#form.currentUserID#" .... >
</cfquery>
<cfset selectedOptions = valueList(qSelectedOptions.MenuId)>
然后在生成复选框的循环内,一个简单的列表函数确定是否应选中每个框:
<cfquery name="qMenu" ...>
SELECT MenuId, MenuName
FROM Menu
ORDER BY MenuName
</cfquery>
<cfoutput query="qMenu">
#MenuName#
<input type="checkbox" name="menuOptions" value="#MenuId#"
<cfif listFind(selectedOptions, menuId)>checked</cfif>>
</cfoutput>
最后,要将选择保存到数据库,首先删除现有值,然后插入任何新值。
<cftransaction>
<cfquery ....>
DELETE FROM UserMenu
WHERE UserId = <cfqueryparam value="#form.currentUserID#" cfsqltype="...">
</cfquery ....>
<cfquery ....>
INSERT INTO UserMenu (UserID, MenuID)
SELECT <cfqueryparam value="#form.currentUserID#" cfsqltype="...">
, MenuId
FROM Menu
WHERE MenuId IN (
<cfqueryparam value="#form.menuOptions#" list cfsqltype="...">
)
</cfquery>
</cftransaction>
我已经设法解决了这个问题。我正在使用 CONTAIN 检查数据库中是否存在该值。我的代码行;
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#"
<cfif qSubCheck.con_check CONTAINS #qMenu.menu_id#>Checked</cfif>
/>#qMenu.menu_name_eng#
谢谢大家的帮助!
我在数据库中有两个 table,Table A 和 Table B。用户填写表格 A,将在 Table A 中插入新记录。在表单 B 中,Table A 中的记录称为复选框。从此表单中,数据将被插入到 Table B 中。以下代码在表单 B 中。此代码中捕获的数据将被插入到列中(假设列名是 menu_check),结果类似于 "value1,value2,value3"(取决于用户选中的复选框数量)
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#" />#qMenu.menu_name_eng#
表单 B 完成后,用户将被定向到一个页面,其中显示了 Table B 中所有记录的列表。用户可以从此 table 编辑任何记录。类似于一个简单的列表,用户可以在其中查看、更新或删除任何记录。在编辑页面中,如何调出menu_check的值,并根据该列查看是否选中了任何复选框。
例如:
- 如果menu_check中的值为'value1,value2,value3',则仅选中第一个、第二个和第三个复选框。
- 如果 menu_check 中的值为 'value1,value3',则仅选中第一个和第三个复选框。
我尝试使用定界符,但仍然无法理解,因为我不知道之后该从哪里继续。
<cfloop delimiter="," index="a" list="#queryname.menu_check#"></cfloop>
我尝试使用类似的东西;
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#" <cfif "#queryname.menu_check#" EQ "#qMenu.menu_id#">selected</cfif> /> #qMenu.menu_name_eng#
但这也没有用。我正在使用 ColdFusion9。
要选中 input[type=checkbox]
,您需要使用 checked
而不是 selected
。
由于 queryname.menu_check
的值,您可以使用 listFind(list, value [, delimiters, includeEmptyValues])
函数检查 queryname.menu_check
.
<cfset checkedstatus = "">
<cfif ListFind(queryname.menu_check, qMenu.menu_id)>
<cfset checkedstatus = " checked">
</cfif>
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#"#checkedstatus#/> #qMenu.menu_name_eng#
在循环中
<cfoutput query="qMenu">
<cfset checkedstatus = "">
<cfif ListFind(queryname.menu_check, qMenu.menu_id)>
<cfset checkedstatus = " checked">
</cfif>
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#"#checkedstatus#/> #qMenu.menu_name_eng#
</cfoutput>
扩展
- 用户 - Table 个独立用户
- 菜单 - Table 个独特的菜单选项
- UserMenu - Table 每个用户的选定菜单选项
注意,连接点 table 将每个选择存储为单独的行。这样您就可以根据需要存储尽可能少或尽可能多的选择,并轻松更改它们。
使用该结构,编辑页面仅检索当前用户的选定选项并将这些值转换为列表。
<cfquery name="qSelectedOptions" ...>
SELECT MenuId
FROM UserMenu
WHERE UserId = <cfqueryparam value="#form.currentUserID#" .... >
</cfquery>
<cfset selectedOptions = valueList(qSelectedOptions.MenuId)>
然后在生成复选框的循环内,一个简单的列表函数确定是否应选中每个框:
<cfquery name="qMenu" ...>
SELECT MenuId, MenuName
FROM Menu
ORDER BY MenuName
</cfquery>
<cfoutput query="qMenu">
#MenuName#
<input type="checkbox" name="menuOptions" value="#MenuId#"
<cfif listFind(selectedOptions, menuId)>checked</cfif>>
</cfoutput>
最后,要将选择保存到数据库,首先删除现有值,然后插入任何新值。
<cftransaction>
<cfquery ....>
DELETE FROM UserMenu
WHERE UserId = <cfqueryparam value="#form.currentUserID#" cfsqltype="...">
</cfquery ....>
<cfquery ....>
INSERT INTO UserMenu (UserID, MenuID)
SELECT <cfqueryparam value="#form.currentUserID#" cfsqltype="...">
, MenuId
FROM Menu
WHERE MenuId IN (
<cfqueryparam value="#form.menuOptions#" list cfsqltype="...">
)
</cfquery>
</cftransaction>
我已经设法解决了这个问题。我正在使用 CONTAIN 检查数据库中是否存在该值。我的代码行;
<input type="checkbox" name="chckmenu" id="chckmenu" value="#qMenu.menu_id#"
<cfif qSubCheck.con_check CONTAINS #qMenu.menu_id#>Checked</cfif>
/>#qMenu.menu_name_eng#
谢谢大家的帮助!