2012-09-20 26 views
1

我不確定這是否可行。我可以連接兩個代表變量名的字符串,然後從中讀取變量值嗎?例如:在讀取ColdFusion變量之前將其連接起來

<cfloop index="person" from="0" to="#numberAuthorized - 1#"> 
    //USING 'thePerson' DIDN'T WORK EITHER 
    <cfset thePerson = 'authorized_name' & person> 
    <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100"> 
    INSERT INTO people (requestid, fullname) 
    VALUES ('#requestid#', '#authorized_name & 1#') 
    </cfquery> 
</cfloop> 

我需要讀取的變量是authorized_name0, authrozied_name1, etc.。所以我正在循環,所以我可以增加一個索引並將它追加到變量名的末尾。然後像這樣插入到我的數據庫中。顯然,這是行不通的。我也嘗試過連接並將其設置爲一個變量(thePerson)並將#thePerson#置於查詢中,但這也不起作用。任何方式我可以做到這一點?

+1

這似乎是這樣做的一個非常規的方式,所以也許它只是並不清楚你所要完成的是什麼。你是否循環遍歷從應用程序中其他位置獲得的名稱列表,並希望將這些名稱插入到數據庫中? – JamesRLamar

+1

_「在閱讀之前連接coldfusion」_ _ - 呵呵!? –

回答

5

編輯我不知道你是如何傳遞這些變量。但是說他們在FORM範圍內...... FORM也是一種結構。使用任何結構,您都可以使用關聯數組表示法來動態訪問鍵。 (另外,請務必正確範圍的變量。)

<cfloop from="0" to="#numberAuthorized - 1#" index="counter"> 
    <!--- extract value of authorized_name0, authorized_name1, ... ---> 
    <cfset variables.fullName = FORM["authorized_name"& counter]> 

    <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100"> 
    INSERT INTO people (requestid, fullname) 
    VALUES (
     <cfqueryparam value="#requestid#" cfsqltype="cf_sql_varchar"> 
     , <cfqueryparam value="#variables.fullName#" cfsqltype="cf_sql_varchar"> 
    ) 
    </cfquery> 
</cfloop> 
+1

雖然我不確定他是否通過FORM範圍獲得了此功能。 OP,你能否澄清你從哪種形式獲取信息?無論哪種方式,你也應該像他的例子中的@Leigh一樣合併cfqueryparam。 – JamesRLamar

+0

@JamesRLamar - 是的,我也不確定。從代碼中不清楚(更新的答案反映了未解決的問題) – Leigh

+0

由於創建表單輸入的結構的怪異方法,表單對象永遠不會被傳遞。它確實將字段放入了ARGUMENTS結構中,所以你的答案仍然可以用參數而不是形式來工作。謝謝! –

0

如果您是從查詢得到您的名字列表此,你將如何通過循環,並在INSERT將它們添加到數據庫:假設

<cfloop from="1" to="#structCount(numberAuthorized)#" index="person"> 
    <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100"> 
    INSERT INTO people (requestid, fullname) 
    VALUES ('#requestid#', '#numberAuthorized["authorized_name"][person]#') 
    </cfquery> 
</cfloop> 

在上面的例子「authorized_name」是列名稱是您從中獲取名稱的表或結構。這可能很容易來自某種結構。

如果這是進入的表單結構的名稱,我更改爲使用structCount(numberAuthorized)的範圍。如果表單名稱的值附加到每個名稱的末尾,如「authorized_name_0」和「authorized_name_1」,則它在代碼中會更清楚地在每次插入之前設置這些變量,因此很明顯這就是您正在做的事情。例如:

<cfloop from="1" to="#structCount(numberAuthorized)#" index="person"> 
    <cfset counter = counter + 1> 
    <cfset newFullname = numberAuthorized["authorized_name_" & counter]> 
    <cfquery name="qAddAuthorizedPeople" datasource="#thedb#" blockfactor="100"> 
    INSERT INTO people (requestid, fullname) 
    VALUES ('#requestid#', '#numberAuthorized["authorized_name"][person]#') 
    </cfquery> 
</cfloop> 

目前仍不清楚您是從一個結構開始工作還是需要根據這個結構改變語法。從這個角度考慮上面更多的僞代碼。

+0

爲什麼不循環查詢而不是遍歷recordcount?很容易。 – Busches

+0

差不多,這並不完全回答我的問題,但它給了我一個主意。我從窗體中獲取authorized_name變量。是的,這是非常規的,因爲我也使用插件來提交ajax表單。這個插件需要我使用特定的函數來創建表單輸入的結構。問題是authorized_name字段的數量是未知的,所以我必須適應任何數字。我必須在服務器端使用表單ID,我不能只是在js中創建一個數組並傳遞它。 –

+0

@JeffFabiny,檢查上面的編輯,並讓我知道如果這是更多你想要做的。 – JamesRLamar

相關問題