Evlikosh Dawark
Evlikosh Dawark

Reputation: 640

How to display each element in a ColdFusion query

I have written this piece of CF code to get and display the data from database. (Actually to populate text fields.) The problem: I am not getting values from the query, but I am correctly getting the number of records.

How am I supposed to access the values returned by the query via a cfloop? Below is my work.

<cfquery name="data_query" datasource="#dsn#">
  SELECT 
    id,
    name
  FROM learning
</cfquery> 


<cfloop query=data_query">
  <li>
    <div class="list_div clearfix">
      <input type="text" value="#URLDecode(name)#">
    </div>
  </li>
</cfloop>
</cfquery>

Upvotes: 0

Views: 1216

Answers (4)

Dave Ostrander
Dave Ostrander

Reputation: 326

And if you didn't know about it:

<cfdump var="#data_query#">

OR

<cfdump var="#data_query#" abort>

Will give you a beautiful display of came back from your query, or in any variable or structure.

Upvotes: 1

duncan
duncan

Reputation: 31920

Also you should properly 'scope' your query columns when outputting. This will make your code easier to maintain in future, e.g. you'll always know that #data_query.name# belonged to the query and wasn't some string set by some other piece of code somewhere. And it'll speed up page performance - if you don't scope variables (this applies to all types of variables, not just queries), then CF will loop through the different scopes until it finds something with this value. So by scoping, you prevent CF having to loop.

<cfquery name="data_query" datasource="#variables.dsn#">
    SELECT 
        id,
        name
    FROM learning
</cfquery> 

<cfoutput query="data_query">
    <li>
        <div class="list_div clearfix">
            #data_query.id#: <input type="text" value="#data_query.name#">
        </div>
    </li>
</cfoutput>

Upvotes: 3

Jura Khrapunov
Jura Khrapunov

Reputation: 1024

You have two options:

  1. Wrap the vars output line with <cfoutput /> tags:

    <cfoutput>#id#: <input type="text" value="#name#"></cfoutput>

  2. Use <cfoutput query="data_query"> loop instead of <cfloop ...>

For the sake of cleaner code I would prefer the second option so your code would be:

<cfquery name="data_query" datasource="#dsn#">
    SELECT 
        id,
        name
    FROM learning
</cfquery> 

<cfoutput query="data_query">
    <li>
        <div class="list_div clearfix">
            #id#: <input type="text" value="#name#">
        </div>
    </li>
</cfoutput>

Upvotes: 4

Jason
Jason

Reputation: 1977

On the whole your logic was fine.. just a few typos and minor changes needed..

Give this a try.

<cfquery name="data_query" datasource="#dsn#">
    SELECT 
        id,
        name
    FROM learning
</cfquery> 

<cfloop query="data_query">
    <li>
        <div class="list_div clearfix">
            #id#: <input type="text" value="#name#">
        </div>
    </li>
</cfloop>

Upvotes: 1

Related Questions