2014-09-12 4 views
0

이전 질문의 업데이트입니다. 이 경우에도 가능할지 모르겠지만 CFOUTPUT 태그 안에 단일 입력 태그가 있습니다. 이 입력 태그는 65 개의 가능한 체크 박스와 같습니다. 내가 겪고있는 문제는 입력 태그의 name 속성에 어떤 값을 넣을 지 파악하려고하는 것입니다. 정적이고 변경되지 않는 22 개의 고유 한 이름이 필요합니다. 내 코드는 다음과 같습니다 :ColdFusion CFOUTPUT 안에 이름 값을 채우는 방법

<form action="new_processOptInfo.cfm" id="displayOptions" method="post" name="displayOptions"> 

<cfoutput query="categorize" group="categoryName"> 
<h3>#UCASE(categoryName)#</h3> 

<cfoutput> 
<input type="checkbox" value="#idOptions#" name="option1" /> #option#<br> 
</cfoutput> 
</cfoutput> 
<input type="submit" value="Submit" name="submitOptions" id="submitOptions" /> 
</form> 

어떻게 입력 태그의 이름을 지정합니까?

+2

왜 고유 한 이름이 필요합니까? 둘 다 이름이 같으면 작업 페이지의 양식 변수는 하나의 변수에 쉼표로 분리 된 값 목록을 갖습니다. –

+0

더 쉬운 방법이있을 수 있습니다. 평범한 영어로 궁극적 인 목표에 대해 자세히 설명해 주시겠습니까? 즉 당신이 해결하려고하는 문제는 무엇이며, 어떻게 해결하려고하는 것이 아닙니다. – Leigh

+0

영어로는 자동으로 생성되는 체크 박스에 고유 한 이름을 지정하고 싶습니다. 나는 테이블에 값을 삽입 할 때 양식 태그 이름이 고유해야한다고 생각했습니다. –

답변

0

@FishBelowtheIce에 따르면 option1은 작업 페이지를 목록으로 보내고 있기 때문에이를 인식하고 반복했습니다. 나는 오타를 바로 잡아야했고 효과가 있었다. 아래 코드는 제가 지금 가지고있는 것입니다.

<cfif IsDefined("form.submitOptions")> 
    <cfloop index="index" list="#options#" delimiters="," > 
     <cfquery name="updateInsOpTable" datasource="applewood"> 
     INSERT INTO ins_opt_table 
     (address,option1,option2,option3,option4,option5,option6 
      , option7,option8,option9,option10,option11,option12 
      , option13,option14,option15,option16,option17,option18 
     ) 
     VALUES (#form.address#, #options#) 
     </cfquery> 
    </cfloop> 
</cfif> 
+2

db 디자인을 제어 할 수 있습니까? 정말 위대한 테이블 구조가 아니기 때문에 ...'prop1, prop2, .. propN'과 같은 칼럼 이름은 거의 항상 정규화 할 기호입니다. 더 나은 방법은 선택한 옵션을 열이 아닌 행에 저장하는 것입니다. 그런 다음 값을 선택하고 삽입하는 작업은 모두 간단합니다. 또한, 'VALUES (# form.address #, # options #)'처럼 원시 형식 값을 SQL에 사용하지 마십시오. 그것은 db를 [sql injection] (http://en.wikipedia.org/wiki/SQL_injection)에 노출시킵니다. 항상 [cfqueryparam]을 사용하십시오. (http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f6f.html) – Leigh

+2

문제를 묻는 메시지, 선택한 메시지가 무엇인지, 어떤 순서로 메시지가 표시되는지 결정하는 방법 선택? @Leigh는 DB 설계를 정상화해야한다고 말했다. 만약 당신이 그걸 제어 할 수 없다면, 각 checkbox에'option # opt #'와 같이 다른 이름을주는 것이 더 낫습니다. 여기서 opt는 1부터 시작하는 증분 변수이고, 그 다음에 작업 페이지에서 옵션이있는 경우 선택하지 않으면 기본값이 지정되지 않습니다. –

+1

이 대답의 또 다른 문제점은 사용자가 모든 옵션에 대해 확인란을 선택하지 않으면 오류가 발생한다는 것입니다. 시도하고있는 것에 대해 라디오 버튼은 체크 박스보다 더 나은 옵션입니다. –

1

댓글에 대한 답변입니다.

평범한 영어로 나는 자동으로 생성되는 내 확인란의 고유 한 이름을 원합니다. 난 당신이 테이블에 값을 삽입 할 때 폼 태그 이름이

은 고유해야한다는 생각 (이 응답이 주석으로 떠나 너무 많은 문자였다.) 기록을 위해

, 필드 이름 돈 고유하지 않아야합니다. ColdFusion은 쉼표로 구분 된 목록에서 중복 된 필드 이름 값을받습니다. 실제로 큰 용도가 있습니다. 당신은 p_IDs라는 50 개의 체크 박스를 가질 수 있고 3이 체크되면 콜드 퓨전은 체크 된 값을 받는다. (체크 된 값이 7,15,32 인 경우).

<input name="desc_#dbID#" type="text"> 
<input type="checkbox" name="p_IDs" value="#dbID#"> 

추천하고 다음

<cfloop list="#form.p_IDs#" index="p"> 
    Product #p#'s description is #form["desc_#p#"]# 
</cfloop> 
같은 처리 페이지 코드를 사용에 CFLOOP에서 텍스트 상자처럼, 당신은 입력 필드를 해당 이름을 지정할 수 있습니다

<cfloop list="#form.p_IDs#" index="p">Product #p# selected</cfloop>. 

같은 cfloops에 매우 유용합니다

cfloop (또는 업데이트 또는 삭제 쿼리)에 삽입 쿼리를 배치 할 수 있습니다 와이).

각 행을 개별적으로 삭제하는 것이 아니라 선택한 행을 일괄 삭제하려는 경우에이 방법을 사용할 수 있습니다.

이 기능 (거의 모든 언어에서 비슷한 방식으로 작동 함)은 체크 박스의 아름다움입니다. 당신은 그들에게 여러 가지 이름을 붙일 수 있지만, 왜 그렇게하고 싶습니까? 라디오 버튼까지 다른 이름을 붙이면 용도가 무의미합니다.

다른 입력 요소의 주제에 관해서는 확실히 다른 이름을 지정하십시오.