Mysql 用于插入的Coldfusion环
我有一个关于coldfusion和循环的问题。我有一个程序,要求用户输入。用户可以为每个食物项目输入内容Mysql 用于插入的Coldfusion环,mysql,sql,coldfusion,Mysql,Sql,Coldfusion,我有一个关于coldfusion和循环的问题。我有一个程序,要求用户输入。用户可以为每个食物项目输入内容 <cfloop query = "GET_ITEM"> <tr> <td align="left" nowrap> <label>#GET_ITEM.ITEM_NBR#</label> </td> <input type="hidden
<cfloop query = "GET_ITEM">
<tr>
<td align="left" nowrap>
<label>#GET_ITEM.ITEM_NBR#</label>
</td>
<input type="hidden" name="Item_number" id="Item_number"
value="#GET_ITEM.ITEM_NBR#">
<td>
<input type="text" name="on_hand" id="on_hand" value="" size="20"
onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="transit" id="transit" value="" size="20"
onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="target_level" id="target_level" value=""
size="20" onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="percentonhand" id="percentonhand" value=""
size="20" onKeyPress="javascript:CheckNumeric();" />
</td>
</tr>
</cfloop>
#获取项目。项目编号#
我想使用下面的代码将每条记录分别插入我的表中
<cfquery name = "insert_records">
<cfloop index="Form.On_hand" list="#FORM.On_hand#" delimiters=",">
Insert into sometable
(VENDORCODE,
ITEM_NBR,
Item_desc,
Target_Level,
Target_Date_Active,
Target_Date_End,
Vendor_name,
Per_of_Actual
)
Values (
<cfqueryparam value = "#Form.Vendor_code#" cfsqltype = "CF_SQL_INTEGER">,
<cfqueryparam value = "#Item_number#" cfsqltype = "CF_SQL_VARCHAR"> ,
<cfqueryparam value = "#Trim(itemdesc.Item_desc)#" cfsqltype = "CF_SQL_VARCHAR">,
<cfqueryparam value = "#Trim(FORM.On_hand)#" cfsqltype = "CF_SQL_INTEGER">,
'2014-12-02',
'2040-01-01',
<cfqueryparam value = "#Trim(itemdesc.Vendor_name)#" cfsqltype = "CF_SQL_VARCHAR">,
100
)
</cfloop>
</cfquery>
插入到某个表中
(卖方代码,
项目编号:,
项目描述:,
目标水平,
目标日期激活,
目标日期结束,
供应商名称,
每单位实际
)
价值观(
,
,
,
,
'2014-12-02',
'2040-01-01',
,
100
)
我的问题是两件事
第一期,如何使事物独一无二,你已经掌握了大部分内容,但如果你这样做:
<cfset x = 0>
<cfloop query="GET_ITEM">
<cfset x++>
<input name="uniqueID_#x#" value="#x#" type="hidden">
<tr>
<td align="left" nowrap>
<label>#ITEM_NBR#</label>
</td>
<input type="hidden" name="Item_number" id="Item_number"
value="#GET_ITEM.ITEM_NBR#">
<td>
<input type="text" name="on_hand#x#" id="on_hand" value="" size="20"
onKeyPress="javascript:CheckNumeric();" />
</td>
etc...
</cfloop>
在
项目\u NBR
字段中,您已经完成了一半的设置
对于所有其他字段,将其命名并标识为
on_hand_#GET_ITEM.ITEM_NBR#
transit_#GET_ITEM.ITEM_NBR#
您还需要像这样更改项目编号字段
<input type="hidden" name="Item_number" id="Item_number_#GET_ITEM.ITEM_NBR#"
value="#GET_ITEM.ITEM_NBR#">
因为,虽然ID用于客户端(javascript),但它们必须是唯一的,才能正常工作
现在在您的查询中,您有
<cfloop list ="#GET_ITEM.ITEM_NBR#" index="iNbr">
<cfloop index="Form.On_hand" list="#form["on_hand_#iNbr#"]#" delimiters=",">
Insert into sometable
(VENDORCODE,
ITEM_NBR,
Item_desc,
Target_Level,
Target_Date_Active,
Target_Date_End,
Vendor_name,
Per_of_Actual
)
Values (
<cfqueryparam value = "#Form["Vendor_code_#iNbr#"]#" cfsqltype = "CF_SQL_INTEGER">,
<cfqueryparam value = "#iNbr#" cfsqltype = "CF_SQL_VARCHAR"> ,
<cfqueryparam value = "#Trim(itemdesc.Item_desc)#" cfsqltype = "CF_SQL_VARCHAR">,
<cfqueryparam value = "#Trim(form["On_hand_#iNbr#"])#" cfsqltype = "CF_SQL_INTEGER">,
'2014-12-02',
'2040-01-01',
<cfqueryparam value = "#Trim(itemdesc.Vendor_name)#" cfsqltype = "CF_SQL_VARCHAR">,
100
)
</cfloop>
</cfloop>
插入到某个表中
(卖方代码,
项目编号:,
项目描述:,
目标水平,
目标日期激活,
目标日期结束,
供应商名称,
每单位实际
)
价值观(
,
,
,
,
'2014-12-02',
'2040-01-01',
,
100
)
我也会将内部循环的索引更改为类似于#iOH#。当代码运行时,如果您尝试在代码的后面使用#form.on#,您将获得循环的最后一个值,而不是列表
正如Leigh优雅地指出的那样,您需要以不同的方式循环,以处理看起来您正试图处理的数量
而不是
您可能需要这样的内容:
如果您确实在每行上存储数量为1的项目
至于
itemdesc
,这可能是一个查询?如果行与行之间的数据不同,您可能希望在外部循环(我添加的那一个)中包含该数据?如果执行此操作,则必须将循环移到第一个循环中的
之外。请尝试以下操作:
<cfloop query = "GET_ITEM">
<tr>
<td align="left" nowrap>
<label>#GET_ITEM.ITEM_NBR#</label>
</td>
<input type="hidden" name="Item_number" id="Item_number"
value="#GET_ITEM.ITEM_NBR#">
<td>
<input type="text" name="on_hand_#get_item.Item_nbr#" id="on_hand" value="" size="20"
onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="transit_#get_item.Item_nbr#" id="transit" value="" size="20"
onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="target_level_#get_item.Item_nbr#" id="target_level" value=""
size="20" onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="percentonhand_#get_item.Item_nbr#" id="percentonhand" value=""
size="20" onKeyPress="javascript:CheckNumeric();" />
</td>
</tr>
</cfloop>
我不确定itemdesc.value在这个查询中的确切位置——我假设另一个查询是基于该项的。在这种情况下,您可能希望在此查询之外循环,并对每个项执行一个插入查询,而不是对它们进行批处理。对于一个典型的购物车表单来说,没有太多的惩罚。通过格式化代码,我注意到您有一个不在
TD
中的部分。这不是您的问题,但可能需要解决。Frank,在某些情况下,像这样的批处理可能有一定的价值-在单个连接中插入非常大的数据集。但总的来说,我同意你的看法。我会在查询外部循环,然后逐个插入。在查询内部循环有一定的时间和地点。这个场景可能是一个合适的时间,但我不确定循环的位置。我不使用mysql,但我模糊地记得它支持类似这种语法的东西。在表(字段1,字段2)中插入值(值1,值2),(值3,值4)。这将插入两条记录。尽管使用这两种方法中的任何一种,但请确保将整批插入内容包装在一个事务中,以确保数据完整性。@user2967577-所需的结果是什么-纯英语(不是代码)?从下面的答案来看,您的代码似乎有几种不同的解释。提供一个例子将有助于澄清问题。有一件事困扰着我……这是cfquery中的cfloop(不是你的错,它是OP提供的)。我个人并不喜欢在这个场景中循环使用表单
集合。当使用计数器变量后缀时,我的首选是。基本上将最大计数器值存储在隐藏字段中。然后处理是一个简单的从/到循环。另外,请注意,在使用查询循环时,不需要创建单独的计数器变量。只需使用#currentRow
变量:)。。尽管说实话,OP并不十分清楚。至少对我来说不是;-)因此,很难说from/to循环是否是正确的方法。鉴于实际字段将具有唯一的名称,我认为根本没有必要使用隐藏的item number字段。此外,我没有看到任何与js交互的内容。@DanBracuk您在这里没有看到与js交互的内容(按id名称),我也没有。我们也没有看到整个文档。他在文档中已经有了隐藏项,这使得在代码处理端对其他字段进行迭代非常容易,也非常容易阅读。但是你的例子中有一个不一致的地方。它同时使用表单.On_hand
和表单[“On_hand#iNbr”]
。其中一个不会存在;-)@李:谢谢你的接球,修好了。只是疏忽。@cfqueryparam-是的,这就是我的意思。老实说,我不确定列表循环是否只是OP错误地尝试为每一组字段插入一条记录,或者他们是否真的想为每一组字段插入x
记录,而x
是手头的数量。@user2967577-如注释中所述,请确保将上述内容包装在cftransaction
中。
<cfloop query = "GET_ITEM">
<tr>
<td align="left" nowrap>
<label>#GET_ITEM.ITEM_NBR#</label>
</td>
<input type="hidden" name="Item_number" id="Item_number"
value="#GET_ITEM.ITEM_NBR#">
<td>
<input type="text" name="on_hand_#get_item.Item_nbr#" id="on_hand" value="" size="20"
onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="transit_#get_item.Item_nbr#" id="transit" value="" size="20"
onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="target_level_#get_item.Item_nbr#" id="target_level" value=""
size="20" onKeyPress="javascript:CheckNumeric();" />
</td>
<td>
<input type="text" name="percentonhand_#get_item.Item_nbr#" id="percentonhand" value=""
size="20" onKeyPress="javascript:CheckNumeric();" />
</td>
</tr>
</cfloop>
<cfquery name = "insert_records">
<cfloop index="#form.item_nbr#" index="item">
Insert into sometable
(VENDORCODE,
ITEM_NBR,
Item_desc,
Target_Level,
Target_Date_Active,
Target_Date_End,
Vendor_name,
Per_of_Actual
)
Values (
<cfqueryparam value = "#Form.Vendor_code#" cfsqltype = "CF_SQL_INTEGER">,
<cfqueryparam value = "#Item#" cfsqltype = "CF_SQL_VARCHAR"> ,
<cfqueryparam value = "#Trim(itemdesc.Item_desc)#" cfsqltype = "CF_SQL_VARCHAR">,
<cfqueryparam value = "#Trim(FORM["on_hand_" & item)#" cfsqltype = "CF_SQL_INTEGER">,
'2014-12-02',
'2040-01-01',
<cfqueryparam value = "#Trim(itemdesc.Vendor_name)#" cfsqltype = "CF_SQL_VARCHAR">,
100
)
</cfloop>
</cfquery>