Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用于插入的Coldfusion环_Mysql_Sql_Coldfusion - Fatal编程技术网

Mysql 用于插入的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

我有一个关于coldfusion和循环的问题。我有一个程序,要求用户输入。用户可以为每个食物项目输入内容

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