2012-08-31 2 views
4

문제가 발생합니다. cfoutput을 사용하여 양식 내에서 쿼리 결과를 실행하고 있습니다. 동적으로 이름이 지정된 몇 가지 cfselect가 있습니다 (예 : entry_1, entry_2 등). 그런 다음 cfj를 사용하여 데이터베이스에 삽입하려는 url의 레코드 수와 함께 actionpage alonge로 전달됩니다.변수 cfform 값 - 중첩 파운드 기호

<cfloop from="1" to="#url.Count#" index="i"> 
<cfquery name="id_#i#" datasource="xxx">Insert Into table1(entry_level) Values(#form.entry_#i##)</cfquery> 
</cfloop> 

그리고 매번 오류가 발생합니다. 배열 형식을 사용해 보았지만 여전히 작동하지 않습니다. 도와주세요!

답변

10

그런 식으로 동적 구조체 선택기를 구성 할 수 없습니다. 같은 결과를 얻으려면 다음과 같이 할 수 있습니다.

그래서, 다음과 같은 데이터를 사용하여이 같은

<cfset url.count = 3> 
<cfset form.entry_1 = 1> 
<cfset form.entry_2 = 2> 
<cfset form.entry_3 = 3> 

뭔가 일 것이다 -

<cfloop from="1" to="#url.Count#" index="i"> 
    <cfquery name="id_#i#" datasource="xxx"> 
    Insert Into table1(entry_level) Values(#form['entry_' & i]#) 
    </cfquery> 
</cfloop> 

ColdFusion에서 기본적으로 당신을 통해 중 구조의 값에 액세스하는 두 가지 방법을 제공합니다. 표기법 또는 괄호를 사용하십시오. 동적 키를 통해 구조체에 액세스하려는 경우 대괄호를 사용해야합니다. 그런데

는 약간 더 나은 것 : 당신은 SQL 주입 공격에 대해 걱정하지 않도록

<cfloop from="1" to="#url.Count#" index="i"> 
     <cfquery name="id_#i#" datasource="xxx"> 
     Insert Into table1(entry_level) Values(<cfqueryparam value="#form['entry_' & i]#">) 
     </cfquery> 
    </cfloop> 

CFQUERYPARAM 자동으로 항목을 이스케이프합니다. 또한 쿼리를 약간 더 효율적으로 만들 수 있습니다.

+0

와우, 이건 큰 도움이됩니다! 정말 고마워! (초심자 질문에 대해 유감스럽게 생각합니다) – MeanDean73

+0

당신은이 문제에 얼마나 많은 시간을 할애했는지 모르며 15 년 동안 CF를 해왔습니다. –

+1

올바른'cfsqltype'을 cfqueryparam에 추가하는 것을 잊지 마십시오. 생략하면 CF는 날짜와 숫자에 대한 암시적인 변환을 강제하는'cf_sql_char'를 기본값으로 사용합니다 (예기치 않은 결과가 나오는 경우가 있음). – Leigh

관련 문제