提交带有多个 checkboxes/select 菜单的表单信息
Submit form information with multiple checkboxes/select menus
我想知道是否可以在用户点击一次提交后将此 fiddle 上的表单像这样输出到数据库中。
+------+------+----------+
| Name | Meal | Quantity |
+------+------+----------+
| Adam | Beef | 2 |
| Adam | Pork | 1 |
| Adam | Lamb | 3 |
+------+------+----------+
http://jsfiddle.net/f8zyakvj/1/
我知道通过 multi selects,你 select 的所有信息都是作为一个数组发送的,但是对于复选框,我怎样才能使信息以数组的形式发送相似的时尚。当我勾选前 3 个框,并提醒食物的价值以查看我得到什么时,无论我勾选哪个框,我得到的都是“1”。
我希望它会像 multi select 一样简单,我可以为 cfm
做这样的事情
<cfloop list="#form.meal#, #form.quantity#" index="currMeal, currQuant">
<cfquery name="Add" datasource="food">
INSERT INTO Log (Name, Meal, Quantity)
VALUES (
<cfqueryparam value="#Form.Name#" cfsqltype="cf_sql_varchar">
<cfqueryparam value="#currMeal#" cfsqltype="cf_sql_varchar">
<cfqueryparam value="#currQuant#" cfsqltype="cf_sql_integer">
)
</cfquery>
</cfloop>
如有任何帮助,我们将不胜感激。
- 您的表单元素没有名称,因此值不会发布到您的表单操作页面
- 对于您的 select 下拉列表,使用名称来放置与膳食复选框对应的值,以便您可以轻松查找 - 例如
<input type="checkbox" value="3" name="meal">
将与 <select name="quantity_3">
配对
- 您的插入查询缺少逗号,这会给您带来 SQL 语法错误。
示例:
<form name="form" action="Submit.cfm" method="post">
<input type="checkbox" value="1" name="meal"> Beef
<select name="quantity_1" class="GC0">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
<input type="checkbox" value="2" name="meal"> Chicken
<select name="quantity_2" class="GC1">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
<input type="checkbox" value="3" name="meal"> Pork
<select name="quantity_3" class="GC2">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
<input type="checkbox" value="4" name="meal"> Lamb
<select name="quantity_4" class="GC3">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
Name: <input type="text" name="name" id="name">
<button value="submit">Submit</button>
</form>
然后在你的处理页面submit.cfm
你可以循环遍历FORM.meal(如果存在)并使用检查的每个项目的值来引用相应的数量字段名称:
<!--- Make sure something was checked before proceeding --->
<cfparam name="FORM.meal" default="" />
<!--- Convert the meal list to an array for looping --->
<cfset mealArray = listToArray(FORM.meal)>
<!--- Loop over the array values --->
<cfloop array="#mealArray#" index="currMeal">
<!--- Insert into database --->
<cfquery name="Add" datasource="food">
INSERT INTO Log (Name, Meal, Quantity)
VALUES (
<cfqueryparam value="#FORM.Name#" cfsqltype="cf_sql_varchar">
,<cfqueryparam value="#currMeal#" cfsqltype="cf_sql_varchar">
,<cfqueryparam value="#FORM['quantity_#currMeal#']#" cfsqltype="cf_sql_integer">
)
</cfquery>
</cfloop>
请记住,您应该考虑将数据库插入包装在一个事务中,and/or考虑一种批量插入的方法。在循环内查询数据库不被认为是最佳实践。
我想知道是否可以在用户点击一次提交后将此 fiddle 上的表单像这样输出到数据库中。
+------+------+----------+
| Name | Meal | Quantity |
+------+------+----------+
| Adam | Beef | 2 |
| Adam | Pork | 1 |
| Adam | Lamb | 3 |
+------+------+----------+
http://jsfiddle.net/f8zyakvj/1/
我知道通过 multi selects,你 select 的所有信息都是作为一个数组发送的,但是对于复选框,我怎样才能使信息以数组的形式发送相似的时尚。当我勾选前 3 个框,并提醒食物的价值以查看我得到什么时,无论我勾选哪个框,我得到的都是“1”。
我希望它会像 multi select 一样简单,我可以为 cfm
做这样的事情<cfloop list="#form.meal#, #form.quantity#" index="currMeal, currQuant">
<cfquery name="Add" datasource="food">
INSERT INTO Log (Name, Meal, Quantity)
VALUES (
<cfqueryparam value="#Form.Name#" cfsqltype="cf_sql_varchar">
<cfqueryparam value="#currMeal#" cfsqltype="cf_sql_varchar">
<cfqueryparam value="#currQuant#" cfsqltype="cf_sql_integer">
)
</cfquery>
</cfloop>
如有任何帮助,我们将不胜感激。
- 您的表单元素没有名称,因此值不会发布到您的表单操作页面
- 对于您的 select 下拉列表,使用名称来放置与膳食复选框对应的值,以便您可以轻松查找 - 例如
<input type="checkbox" value="3" name="meal">
将与<select name="quantity_3">
配对
- 您的插入查询缺少逗号,这会给您带来 SQL 语法错误。
示例:
<form name="form" action="Submit.cfm" method="post">
<input type="checkbox" value="1" name="meal"> Beef
<select name="quantity_1" class="GC0">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
<input type="checkbox" value="2" name="meal"> Chicken
<select name="quantity_2" class="GC1">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
<input type="checkbox" value="3" name="meal"> Pork
<select name="quantity_3" class="GC2">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
<input type="checkbox" value="4" name="meal"> Lamb
<select name="quantity_4" class="GC3">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
Name: <input type="text" name="name" id="name">
<button value="submit">Submit</button>
</form>
然后在你的处理页面submit.cfm
你可以循环遍历FORM.meal(如果存在)并使用检查的每个项目的值来引用相应的数量字段名称:
<!--- Make sure something was checked before proceeding --->
<cfparam name="FORM.meal" default="" />
<!--- Convert the meal list to an array for looping --->
<cfset mealArray = listToArray(FORM.meal)>
<!--- Loop over the array values --->
<cfloop array="#mealArray#" index="currMeal">
<!--- Insert into database --->
<cfquery name="Add" datasource="food">
INSERT INTO Log (Name, Meal, Quantity)
VALUES (
<cfqueryparam value="#FORM.Name#" cfsqltype="cf_sql_varchar">
,<cfqueryparam value="#currMeal#" cfsqltype="cf_sql_varchar">
,<cfqueryparam value="#FORM['quantity_#currMeal#']#" cfsqltype="cf_sql_integer">
)
</cfquery>
</cfloop>
请记住,您应该考虑将数据库插入包装在一个事务中,and/or考虑一种批量插入的方法。在循环内查询数据库不被认为是最佳实践。