Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 202
  • Last Modified:

Inserting an array into another array with ColdFusion

I have some code that checks a form for errors and puts any in an array. The results might look something like this:

------------------------------------------------------------------------------------------
Array: Errors
------------------------------------------------------------------------------------------
name        | Please enter your name.
------------------------------------------------------------------------------------------
questions  | Please enter your questions or comments
------------------------------------------------------------------------------------------

I have another array that needs to contain the information from this array, which should look something like this:

------------------------------------------------------------------------------------------
Array: data
------------------------------------------------------------------------------------------
success        | False
------------------------------------------------------------------------------------------
errors           | name        | Please enter your name.
------------------------------------------------------------------------------------------
                     | questions  | Please enter your questions or comments
------------------------------------------------------------------------------------------

I can't for the life of me figure out how to get the first array into the second array. Following is the code I have so far:

<cfset errors = ArrayNew(2)>
<cfset data = ArrayNew(3)>

<cfif Trim(FORM.name) EQ "">
	<cfset errors[1][1] = "name">
	<cfset errors[1][2] = "Please enter your name.">
</cfif>
<cfif Trim(FORM.email) EQ "" OR NOT IsValid("email", FORM.email)>
	<cfset errors[2][1] = "email">
	<cfset errors[2][2] = "Please enter a valid email.">
</cfif>
<cfif Trim(FORM.phone) EQ "">
	<cfset errors[3][1] = "phone">
	<cfset errors[3][2] = "Please enter your phone number.">
</cfif>
<cfif Trim(FORM.questions) EQ "">
	<cfset errors[4][1] = "questions">
	<cfset errors[4][2] = "Please enter your questions or comments.">
</cfif>

<cfif NOT Len(errors)>
	<cfset data[1][1] = "success">
	<cfset data[1][2] = "false">
	<cfset data[2][1] = "errors">
 	<cfset ArrayInsertAt(data[2], 2, errors)>
<cfelse>
	<cfset data[1][1] = "success">
	<cfset data[1][2] = "true">
	<cfset data[2][1] = "message">
	<cfset data[2][2] = "Thank you for your inquiry! We'll be in touch with you soon.">
</cfif>

Open in new window


The ArrayInsertAt obviously doesn't work, it's just the latest in my string of failed attempts. What should I be doing here? Thanks!
0
SiobhanElara
Asked:
SiobhanElara
1 Solution
 
gdemariaCommented:
I'm a bit biased here, I don't like two-dimensional arrays for this purpose.  So easy to get lost.    Before answering your question directly, I would like to suggest changing your format to a simpler design.   Your design also has the flaw that if the person leaves out their name and message, then you have an array with position 1 and 4 populated but not 2 and 3.

The following code uses names values instead of numbers (structures instead of arrays) and fills your error array in order (without skipping over numbers)

<!--- assume success ---->
<cfset data = structNew()>
<cfset data.status  = "success">
<cfset data.valid   = true>
<cfset data.message = "Thank you for your inquiry! We'll be in touch with you soon.">
<cfset data.error   = arrayNew(1)> <!--- empty error array --->


<cfif Trim(FORM.name) EQ "">
    <cfset pos = arrayLen(errors)+1>
    <cfset errors[pos] = structNew()>
	<cfset errors[pos].code = "Name">
	<cfset errors[pos].message = "Please enter your name">
</cfif>
<cfif Trim(FORM.name) EQ "">
    <cfset pos = arrayLen(errors)+1>
    <cfset errors[pos] = structNew()>
	<cfset errors[pos].code = "email">
	<cfset errors[pos].message = "Please enter a valid email">
</cfif>
<cfif Trim(FORM.name) EQ "">
    <cfset pos = arrayLen(errors)+1>
    <cfset errors[pos] = structNew()>
	<cfset errors[pos].code = "phone">
	<cfset errors[pos].message = "Please enter your phone number">
</cfif>
<cfif Trim(FORM.name) EQ "">
    <cfset pos = arrayLen(errors)+1>
    <cfset errors[pos] = structNew()>
	<cfset errors[pos].code = "questions">
	<cfset errors[pos].message = "Please enter your questions or comments">
</cfif>
<cfif arrayLen(errors)>
   <cfset data.valid = false>
   <cfset data.message = "Please correct the following errors">
   <cfset data.error   = errors>
</cfif>

Open in new window

0
 
_agx_Commented:
(no points ...)

FWIW - I completely agree with gdemaria.  His approach is much more intuitive.
0
 
SiobhanElaraAuthor Commented:
That is SO much better! Thank you.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now