我有一个带有多个选择选项的表单。我想这样做,以便当用户点击提交时,它将使用所有相关字段填充我的数据库,然后对多个选择部分进行某种循环。
https://jsfiddle.net/vtyofmza/1/
例如,有人会突出显示多个选择中的3个字段并输入其名称。当他们点击提交时,数据库将填充
John Doe - 早餐
John Doe - Snacks
John Doe - 甜点
我在想这样的事情可能有用,但它只是重新重新整理表格
<cfquery name="Add" datasource="food">
INSERT INTO Log (Meal, Name)
VALUES (#Form.Neal#, #Form.Name#)
</cfquery>
<cflocation url="... loops back to original page">
但是当它提交信息时,它会返回并重新重置页面。
submit.cfm看起来像这样
$scope.elems = [
{name: "Fire", beats: "Earth"},
{name: "Water", beats: "Fire"}
];
答案 0 :(得分:11)
正如@Kevin B上面所说,这不是javascript的工作。任何额外的处理或循环都应该在ColdFusion中完成。
基本循环:
多个选择将作为csv列表提交,即form.Meal = "Breakfast,Snacks,Dessert"
。只需遍历该列表并为每餐+名称执行插入。有一些方法可以改善这种循环,但下面是基本的想法(没有验证):
<!--- ensure field always exists --->
<cfparam name="form.Meal" default="">
<!--- loop through the meal list and insert each one individually --->
<cfloop list="#form.Meal#" index="currMealName">
<cfquery name="Add" datasource="food">
INSERT INTO Log (Meal, Name)
VALUES (
<cfqueryparam value="#currMealName#" cfsqltype="cf_sql_varchar">
, <cfqueryparam value="#Form.Name#" cfsqltype="cf_sql_varchar">
)
</cfquery>
</cfloop>
NB:一些重要说明
更好的选择
如果选择列表值的来源是另一个数据库表,则另一种方法是使用SELECT
语句来插入值。这具有内置验证的优点,并且还在单个查询中插入所有值。就个人而言,我更喜欢这种方法而不是循环。出于演示目的,该示例使用type = cf_sql_varchar。显然,根据需要更新类型以匹配您的实际列。
INSERT INTO Log (Meal, Name)
SELECT Meal
, <cfqueryparam value="#form.name#" cfsqltype="cf_sql_varchar">
FROM YourMealTable
WHERE Meal IN
(
<cfqueryparam value="#form.meal#" list="true" cfsqltype="cf_sql_varchar">
)