Skip to main content
September 14, 2010
Question

How to get dynamic query results from an array/structure

  • September 14, 2010
  • 1 reply
  • 1875 views

I have an edit page that is set up to display phone number fields from the user stored in our database. The properties for the phone number fields are set by a structure of arrays. My problem is that when a user has more than 1 phone number in my database, my structures correctly show this on the form by displaying 2 phone numbers. The problem I am having is that when it shows multiple phone numebrs, it always shows the first result and just repeats it as opposed to dropping the 2nd or 3rd phone number in their respective fields.

array and structure code below:

      <!--- Mobile --->
      <cfset mobile = StructNew()>
      <cfset mobile.dynamic = false>
      <cfset mobile.dynamicLabel = '+ Add'>
      <cfset mobile.fields = ArrayNew(1)>
<cfif #checkuserv.recordcount# GT '0'>   
      <cfset mobile.fields[1] = StructNew()>
      <cfset mobile.fields[1].required = false>
      <cfset mobile.fields[1].label = 'Phone Number 1'>
      <cfset mobile.fields[1].displayIcon = false>
      <cfset mobile.fields[1].voice = true>
      <cfset mobile.fields[1].voiceChecked = true>
      <cfset mobile.fields[1].toolTip = "Please choose if you would like to receive a text or voice call on this number">
</cfif>
<cfif #checkuserv.recordcount# IS '2'>    
      <cfset mobile.fields[2] = StructNew()>
      <cfset mobile.fields[2].required = false>
      <cfset mobile.fields[2].label = 'Phone Number 2'>
      <cfset mobile.fields[2].displayIcon = false>
      <cfset mobile.fields[2].toolTip = "Please choose if you would like to receive a text or voice call on this number">
     
      <cfset mobile.fields[2].voice = true>
      <cfset mobile.fields[2].voiceChecked = true>
</cfif>
<cfif #checkuserv.recordcount# IS '3'>     
      <cfset mobile.fields[3] = StructNew()>
      <cfset mobile.fields[3].required = false>
      <cfset mobile.fields[3].label = 'Phone Number 3'>
      <cfset mobile.fields[3].displayIcon = false>
      <cfset mobile.fields[3].toolTip = "Please choose if you would like to receive a text or voice call on this number">
      <cfset mobile.fields[3].voice = true>
      <cfset mobile.fields[3].voiceChecked = true>
</cfif>

Here is the code for my fields that call the array info:

<!--- Voice 1 --->      

       
        <cfloop index="i" from="1" to="#ArrayLen(mobile.fields)#">
            <cfif i EQ 1 OR NOT mobile.dynamic OR form.mobileDisplayed GTE i>
                <cfparam name="form.areacode_#i#" default="">
                <cfparam name="form.prefix_#i#" default="">
                <cfparam name="form.suffix_#i#" default="">
            <div class="fieldBlock phoneBlock" id="phoneBlock#i#">
                <label for="areacode_#i#">
                    <cfif mobile.fields.required><span>*</span></cfif>
                    <cfif mobile.fields.displayIcon><img src="/images/sm_phone.jpg" /></cfif>
                    #mobile.fields.label#:
                </label>
                <div class="inputBlock">
                    <input type="text" maxlength="3" onKeyUp="numTyped(this, 'prefix_#i#', 3, event)" name="areacode_#i#" id="areacode_#i#" class="areacode" value="#trim(left(checkuserv.sub_user_number, '3'))#" />
                    <input type="text" maxlength="3" onKeyUp="numTyped(this, 'suffix_#i#', 3, event)" name="prefix_#i#" id="prefix_#i#" class="prefix" value="#trim(mid(checkuserv.sub_user_number, "4", '3'))#" />
                    <input type="text" maxlength="4" name="suffix_#i#" id="suffix_#i#" class="suffix"  value="#trim(mid(checkuserv.sub_user_number, "7", '4'))#" />
                    <cfif StructKeyExists(mobile.fields, "voice") and mobile.fields.voice>
                        <div class="voice" id="voice#i#">
                            <input type="radio" value="0" name="voice_#i#"<cfif Not StructKeyExists(mobile.fields, "voiceChecked") or Not mobile.fields.voiceChecked> checked="checked"</cfif> />
                            <label>Text</label>
                            <input type="radio" value="1" name="voice_#i#"<cfif StructKeyExists(mobile.fields, "voiceChecked") and mobile.fields.voiceChecked> checked="checked"</cfif> />
                            <label>Voice</label>
                        </div>
                    </cfif>
                    <cfif StructKeyExists(mobile.fields, "toolTip") and mobile.fields.toolTip neq "">
                        <div class="toolTip" id="toolTip_#i#" title="#mobile.fields.toolTip#" onClick="alert('#mobile.fields.toolTip#')">?</div>
                    </cfif>
                </div>
<!--- This number was invalid or if geocoding failed, and they've picked a carrier to override, display the carrier override dropdown--->
                <cfif ListFindNoCase(invalidMobileIndexList, i) or ( showMap and IsDefined("form.carrierOverride" & i) )>
                    <div id="carrierOverrideBox#i#" class="carrierOverrideBlock">
                        <label>Carrier:</label>
                        <div class="inputBlock">
                            <select name="carrierOverride#i#" id="carrierOverride#i#">
                                <option value="-1">-- Pick your carrier --</option>
                                <cfloop query="carriers">
                                    <!--- 1111 is voice, 0 is NONE, don't display  --->
                                    <cfif Not ListFindNoCase("0,1111", carriers.carrier_id)>
                                        <option value="#Trim(carriers.carrier_id)#"<cfif IsDefined("form.carrierOverride" & i) and form["carrierOverride" & i] eq Trim(carriers.carrier_id)> selected="selected"</cfif>>#Trim(carriers.carrier_title)#</option>
                                    </cfif>
                                </cfloop>
                            </select>
                            <a href="http://www.inspironlogisticscontact.cfm?account_id=#account_id#&carrierOverride=1"
                                   title="Carrier help"
                                   onClick="window.open('http://www.inspironlogisticscontact.cfm?account_id=#account_id#&carrierOverride=1','#account_id#','width=500,height=800,scrollbars=no,screenX=100,screenY=100,top=100,left=100,resizable=1'); return false;"
                                  >?</a>
                        </div>
                    </div>
                </cfif>
                <cfif mobile.dynamic AND i EQ form.mobileDisplayed AND i LT ArrayLen(mobile.fields)>
                <div class="dynamicAddBlock dynamicAddMobileBlock" id="dynamicAddmobile_#i#">
                      <a href="javascript: submitAddField('mobile')">#mobile.dynamicLabel#</a>
                </div>
                </cfif>
            </div>
            </cfif>
        </cfloop>
        <cfif mobile.dynamic>
            <input name="mobileDisplayed" id="mobileDisplayed" value="#form.mobileDisplayed#" type="hidden" />
        </cfif>
        <input name="carrierOverrideActive" id="carrierOverrideActive" value="<cfif carrierOverrideActive>1<cfelse>0</cfif>" type="hidden" />

I have been stuck on this for days, finally turning to the forum today with a few different issues. I hate trying to work within the framwork of other peoples code.

I use coldfusion 8
       

This topic has been closed for replies.

1 reply

Inspiring
September 14, 2010

I'd start by making sure that this part "mobile.dynamic OR form.mobileDisplayed GTE i" isn't causing your problem.

September 14, 2010

I dont htink that is the problem. I removed it completly and the page stills runs without error and produces the same problem. It recognizes that there are multiple numbers found for the user, but it just keeps repeating the first number found.

Inspiring
September 14, 2010

You'll need to post some more code in order for us to recreate your problem. For example, what are "checkuserv" and "carriers"? These objects are not defined in your sample. You might also post a simpler block of code that can be used to recreate your problem.