d.lanza38
d.lanza38

Reputation: 2627

How to concat two strings and use the result as a variable name in coldfusion?

I have a form which has many fields in the format of

On the form action page, I would like to be able to use a loop and be able to use the index of the loop to concat with a string prefix like this <cfset newField = "field-" & #index#> and then use the #Variables.newField# to access the form field on the previous page.

I've been playing around with the Evaluate() function, but no luck. I don't use ColdFusion much, so I may just be a little off on the syntax.

An example of how I am using it is:

<cfset newField = "form.field-" & #index#>
<input type="hidden" 
      name="field-<cfoutput>#index#</cfoutput>" 
      value="<cfoutput>Evaluate(Variables.newField)</cfoutput>">

Upvotes: 7

Views: 10417

Answers (2)

Joe C
Joe C

Reputation: 3556

You don't have to use evaluate at all for this case. Just access the variables struct by key name.

<cfset newField = "form.field-" & index>
<cfset value = variables[newField]>

or just

<cfset value = variables["form.field-#index#"]>

or if you don't want to use an intermediary variable

<cfoutput>#variables["form.field-" & index]#</cfoutput>

Upvotes: 9

imthepitts
imthepitts

Reputation: 1647

There's no need to set it to the variables scope. Within your loop, you can simply access the form field values using associative array notation directly from the form scope like this:

<input type="hidden" name="field-<cfoutput>#index#</cfoutput>" 
value="<cfoutput>#form['field-' & index]#</cfoutput>">

For extra safety, it would be wise to check for the existence of each form field before trying to display it:

<cfif structKeyExists(form, 'field-' & index)>
    <!--- display field --->
</cfif>

Upvotes: 4

Related Questions