Solved

Inserting an array into another array with ColdFusion

Posted on 2014-01-30
3
189 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 500 total points
Comment Utility
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_
Comment Utility
(no points ...)

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

Author Closing Comment

by:SiobhanElara
Comment Utility
That is SO much better! Thank you.
0

Featured Post

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Suggested Solutions

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…
Recently while working on a project I got a very annoying cfdocument has no body error message. I had never seen this error before. So I checked the code. The code was pretty simple; it was Just showing me the cfdocumnt tag and inside that tag a …
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

762 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

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now