2012-09-18 1 views
0

를 업데이트하지 I는동적 체크 박스 올바르게

<cfset counter = 0> 
    <form name="setPermissions" class="setPermissions" action="" method="post"> 
    <cfoutput> 
      <cfloop query="getUserAccess"> 
       <input name="Meetings_#Counter#" type="checkbox" /> 
       <cfset counter = counter + 1> 
      </cfloop> 
     </cfoutput> 
     </form> 
getUserAccess

쿼리이 체크 박스 (6)가 출력되는 것을 의미 6 개 행을 갖고 동적 체크 박스를 생성했는지.

이 코드가 정확하지 않은 경우, 나는

<cfloop from="0" to="#getUserAccess.RecordCount#" index="i"> 
    <cfquery datasource="#Request.dsn#"> 
     UPDATE table SET 
      <cfif structKeyExists(FORM, 'Meetings_#i#')> 
      Meetings = <cfif FORM['Meetings_#i#'] EQ "on">1,<cfelse>0,</cfif> 
      </cfif> 
     WHERE ID = '#an_ID_that_is_specified#' 
    </cfquery> 
</cfloop> 

사과를 다음 쿼리를 실행하고있어, 이것들을 읽고 각각 테이블을 업데이트하려면, 거기 내 페이지에서 실행하고있을 때 작동하지만, 이 체크 박스가 약 20 개 생성되었으므로 하나만 볼 수 있도록 코드를 잘라 냈습니다.

자,이 코드는 내가 확인란을 선택하고 양식을 제출할 때,이 코드는 1

에 값을 설정하기 위해 데이터베이스를 업데이트합니다, 좋은 작품

유일한 문제는, 내가 상자의 선택을 취소하면, 그것을 값을 0으로 변경하지 않습니다. 이것이 내가 붙어있는 곳입니다. 값이 on이 아닌 값을 0으로 변경하지 않는 이유는 무엇입니까?

아무 것도 아직 전달되지 않았는지 확인하기 위해 <cfdump>을 완료했으나 없습니다. 모든 상자와

내가이 덤프 일부 쳤다으로

MEETINGS_0 on 
MEETINGS_1 on 
MEETINGS_2 on 
MEETINGS_3 on 
MEETINGS_4 on 
MEETINGS_5 on 

를 얻을 쳤다, 나는 쳤다하지 않은 사람은 표시되지 않습니다.

값이 여전히 (즉, 작동 방법) 선택 해제 한 경우 단순히 늘 모든 값을 제출 1에 0

답변

4

체크 박스에서 업데이트되지 그러나. 따라서 검색어는 다음과 같이 가까워 야합니다.

UPDATE table SET 
    Meetings = <cfif structKeyExists(FORM, 'Meetings_#i#')>1,<cfelse>0,</cfif> 
WHERE ID = '#an_ID_that_is_specified#' 
+0

예쓰! 나는 약 1 시간 동안 벽에 머리를 부딪치게되었다. 그리고 그것은 단순했다! –

+1

CF9에서는 3 진 성명을 사용할 수 있으므로 'Meetings = '그러나 그것의 사소한 변화와 필요가 없다. – Dpolehonski

+0

@ 폴린 스키가 좋아 보인다!이것을 들여다 볼 것입니다. 그러나 게으르지 만 귀찮게하지 않을 것입니다. 거기에 많은 업데이트 조건이 있으므로 잠시 시간이 걸릴 수 있습니다! 그래도 머리를 가져 주셔서 감사합니다! –

0

Sergii는 이미 원래 질문에 대답했습니다. 하지만 다른 접근법을 던지기 만하면됩니다 ...

목록을 사용할 수도 있습니다. 귀하의 ID가 숫자라고 가정하면, 모든 체크 박스에 동일한 이름을 부여하고 원래 ID를 숨겨진 필드에 저장하십시오.

<cfoutput query="getUserAccess"> 
     #meetingID# 
     <input name="SelectedMeetings" type="checkbox" value="#meetingID#" /> 
    </cfoutput> 
    <cfoutput> 
     <input name="OriginalMeetings" type="hidden" value="#valueList(getUserAccess.meetingID)#" /> 
    </cfoutput> 
작업 페이지 FORM.SelectedMeetings



이 선택 된 모든 아이디의 목록이 포함됩니다. 단순히 두 목록의 차이를 가져와 "선택 해제"된 ID를 찾으십시오.

<cfparam name="FORM.SelectedMeetings" default=""/> 
    <cfset FORM.DeSelectedMeetings = replaceList(FORM.OriginalMeetings 
               , FORM.SelectedMeetings 
               , "") /> 

그런 다음 6 개가 아닌 2 개의 쿼리 만 있으면 데이터베이스를 업데이트 할 수 있습니다. 분명히 어떤 방법을 선택하든, 트랜잭션 내에서 모든 쿼리를 래핑하여 모두 성공 또는 실패했는지 확인해야합니다.

<cfif listLen(trim(FORM.selectedMeetings))> 
    <cfquery datasource="#Request.dsn#"> 
     UPDATE table 
     SET Meetings = 1 
     WHERE ID IN ( 
      <cfqueryparam value="#FORM.selectedMeetings#" list="true" cfsqltype="cf_sql_integer"> 
     ) 
    </cfquery> 
</cfif> 

<cfif listLen(trim(FORM.DeSelectedMeetings))> 
    <cfquery datasource="#Request.dsn#"> 
     UPDATE table 
     SET Meetings = 0 
     WHERE ID IN ( 
      <cfqueryparam value="#FORM.DeSelectedMeetings#" list="true" cfsqltype="cf_sql_integer"> 
     ) 
    </cfquery> 
</cfif>