使用多个复选框/选择菜单提交表单信息

时间:2015-08-26 16:24:41

标签: javascript html sql-server coldfusion

我想知道在用户点击提交一次后,是否有可能让这个小提琴上的表格出现在数据库中。

+------+------+----------+
| Name | Meal | Quantity |
+------+------+----------+
| Adam | Beef |        2 |
| Adam | Pork |        1 |
| Adam | Lamb |        3 |
+------+------+----------+

http://jsfiddle.net/f8zyakvj/1/

我知道通过多次选择,您选择的所有信息都是作为数组发送的,但是对于复选框,我该如何进行以便以类似的方式发送信息。当我检查前3个盒子,并提醒食物的价值,看看我得到的东西,无论我检查哪个盒子,我得到的都是“1”。

我希望它会像多选中一样简单,我可以为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>

对此问题的任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:2)

  1. 您的表单元素没有名称,因此值不会发布到您的表单操作页面
  2. 对于您的选择下拉菜单,请使用该名称将相应于餐点的值复选框,以便您可以轻松查找 - 例如<input type="checkbox" value="3" name="meal">将与<select name="quantity_3">
  3. 配对
  4. 您的插入查询缺少逗号,并且会给您一个SQL语法错误。
  5. 示例:

    <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>
    

    请记住,您应该考虑在事务中包装数据库插入,和/或考虑批量插入的方法。查询循环内的数据库不被视为最佳实践。

相关问题