Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Inserting an array into another array with ColdFusion

Posted on 2014-01-30
3
Medium Priority
?
197 Views
Last Modified: 2014-01-30
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
Comment
Question by:SiobhanElara
3 Comments
 
LVL 39

Accepted Solution

by:
gdemaria earned 2000 total points
ID: 39821338
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
 
LVL 52

Expert Comment

by:_agx_
ID: 39821466
(no points ...)

FWIW - I completely agree with gdemaria.  His approach is much more intuitive.
0
 

Author Closing Comment

by:SiobhanElara
ID: 39821691
That is SO much better! Thank you.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The technique is by far very Simple! How we can export the ColdFusion query results to DOC file?  Well before writing this I researched a lot in Internet but did not found a good Answer anyways!  So i thought now i should share my small snippet w…
PROBLEM: How to add your own buttons to the bottom toolbar with paging info ( result count ). While creating a cfgrid, I ran into an issue where I wanted to embed my own custom buttons where the default ones ( insert / delete / etc… ) are for aes…
Loops Section Overview
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question