As CF does not really create arrays, you might consider simpler field names. ie For each set thrust_x, strength_x, ... projectID_x . If you store the total number of sets in a hidden field, you can simply loop once and do the extract and insert at the same time. Also since you are repeating the same sql multiple times, be sure to use cfqueryparam on all fields. <cfparam name="form.numberOfSets" default="0"> <cfloop from="1" to="form.numberOfSets" index="counter"> <cfset thrust = FORM["thrust_"& counter]"> <cfset strength = FORM["strength_"& counter]"> .... other fields <cfquery ...> INSERT INTO ProjectCompetitors ( idProject,idCompetitor,strength,weakness,response ) VALUES ( <cfqueryparam value="#FORM.idproject#" cfsqltype="cf_sql_integer" > , <cfqueryparam value="#thrust#" cfsqltype=cf_sql_integer" > , <cfqueryparam value="#strength#" cfsqltype="cf_sql_varchar"> , .... other fields ) </cfquery> </cfloop> <cfoutput> <cfloop index="i" from="1" to="#count#" > <cfset stNew=structNew()> <cfset stNew["thrust"]=#FORM["COMPETITOR"&"["&i-1&"]"&"[THRUST]"]# > As an aside, since you are not displaying the variables, there is no need for cfoutput. You can also skip the extra pound signs around the form variables. CF will evaluate the values of those variables just fine without them.
... View more