2014-10-13 4 views
2

드롭 다운에서 평가할 수있는 항목 목록 (예 : 1 ~ 5)이있는 페이지로 이동할 수있는 시스템을 설정하고 싶습니다. 이 목록은 꽤 길어질 것이므로 "저장"을 누르지 않고도 각 항목을 검토하고 순위를 매길 수 있다면 훨씬 편리 할 것입니다.ColdFusion 및 AJAX - 데이터베이스 업데이트

가 AJAX에 올 때 나는 매우 많은 초보자 해요하지만 난이 이 어려울 수 없습니다 그림. 나는 꽤 관련 있다고 생각하는 an answer in a different discussion을 찾았지만 정확한 정보를 제공하지 못하여 정확하게 무엇을해야하는지 알 수 없었다.

즉, jQuery 및 ColdFusion과 함께 AJAX를 사용하여 저장/전송 버튼을 사용하지 않고 데이터베이스를 업데이트하려면 어떻게해야합니까?

정리 : 사용자가 순위가 아닌 항목을 평가할 수 있음을 분명히해야합니다. # 1, # 2, # 3 등이 없다는 의미. 각 항목은 1-5의 척도로 평가 될 수 있습니다.

현재 사용자가 드롭 다운에서 항목을 선택하면 ".change()"의 모든 것을 기반으로합니다. 어느 시점에서 변경된 항목의 "ID"와 새로운 "등급"으로 설정된 두 개의 jQuery 변수가 있습니다. 이 두 변수를 사용하여 데이터베이스의 테이블을 업데이트하는 방법을 찾아야합니다. $.post('update.cfc', {ID: inputID, rating: selRat}).onChange()를 트리거 :

기본 페이지에서 업데이트

은, 지금은 간단한 jQuery를 AJAX 포스트 전화를 가지고있다. "inputID"는 데이터베이스에서 업데이트하려는 항목의 ID이고 "selRat"은 드롭 다운에서 선택한 등급입니다.

<cfcomponent output="false"> 
<cffunction name="updateRating" access="remote" output="false"> 

    <cfupdate datasource="#session.db#" name="update"> 
     UPDATE ajaxTest 
     SET rating = #FORM.rating# 
     WHERE ID = #FORM.ID# 
    </cfupdate> 

</cffunction> 
</cfcomponent> 

나는 현재 500 (Internal Server Error)을 얻고 있습니다.

생각/제안?

+0

옵션의 순위를 변경하려면 어떤 종류의 버튼이 필요합니다. 맞습니까? 아마도 옵션을 위 또는 아래로 이동할 수있는 쌍일 것입니다.해당 버튼에 click 이벤트를 사용하여 저장을 시작하십시오. 그러나 항목을 여러 슬롯 위로/아래로 이동하면 여러 슬롯을 덮어 쓸 위험이 있습니다. 변경 한 후에 클릭해야하는 저장 버튼으로 더 나을 수도 있습니다. –

+2

당신은 올바른 길을 가고 있습니다. jquery의 ajax 함수를 콜드 퓨전과 함께 사용하는 방법에 대한 자습서를 찾으십시오. 당신이 정말로 붙어 있다면 다시 돌아와서 특정 질문을하십시오. –

+0

@ClaytonLeis : 격려에 감사드립니다! ColdFusion에서 AJAX를 통해 전달 된 변수를 # Form.variable #을 통해 액세스 할 수 있다는 것을 알았습니다. 게시물을 더 많은 정보로 업데이트했습니다. 나는 당신이 그것을 원한다면 곧장 대답 대신에 힌트를받는 것을 좋아한다. 배우는 데 도움이됩니다! 다시 한번 감사드립니다. – Steve

답변

3

어떤 방식으로이 양식을 작성 했습니까? 실행 된 시도를 기록하기 위해 파일에 기록하는 것과 같은 간단한 디버깅을 추가 할 수도 있습니다.

나에게 두드러진 한 가지 : 개폐 태그가 <cfquery이어야합니다. cfupdate 또는 cfinsert는 사용하지 않지만 어떤 cf flavor도 사용하려는 구문을 지원하지 않는다고 생각합니다. 쉬운 실수라고 믿게 만든다. 내가 제출 한 경우 다른 주에

, 즉 쿼리

.. 접선에 떨어져 갈 특히 위험, 미안 수, ID의 값을 "0 DROP 표 사용자를"사용자 테이블 (사라 사용자 테이블이있는 경우). 또한 Members, News, Pages, Content, CMS, Transactions와 같은 다른 공통 테이블 이름도 전달할 수 있습니다. (나는 이것을하지 않겠지 만 다른 사용자가 언제 알 수 있는지 알 수 없다.)

정말 쉬운 해결책이 있습니다. <cfqueryparam>. 태그를 조사하도록하겠습니다.하지만 특정 검색어를 변경하는 방법을 알려 드리겠습니다.

<cfquery datasource="#session.db#" name="update"> 
    UPDATE ajaxTest 
    SET rating = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.rating#"> 
    WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.id#"> 
</cfquery> 

변수를 CFQUERYPARAMing하면이 위험을 방지하고 변수 값을 sql 대신 텍스트로 전달합니다.

+0

오 와우 ... 나는 그 실수를했다고 믿을 수 없다 (cfquery 대신 cfupdate)! 또한 cfqueryparam에 대한 팁, cfqueryparap (관련 사용자 이름)을 보내 주셔서 감사합니다. 이것은 테스트 사이트 및 데이터베이스 였지만 항상 그렇게하는 습관을 가질 필요가 있습니다. "cfupdate"실수는 확실히 초기 문제였습니다. 이제 POST 오류 (302 Moved Temporarily)와 GET 오류 (403 Forbidden)가 표시됩니다. 그래서, 다시 한 번 내 바보 같은 무언가 확신합니다. – Steve

+1

@Steve이 .cfc 페이지는 어디에 있습니까? 테스트를 위해 빈 application.cfc를 사용하여 폴더에 모든 항목을 넣은 다음 cfquery에 수동으로 # session.db #를 채 웁니다. mysite.com/noapp/update.cfc와 같습니다. 이것을 사용하여 간단하고 배우십시오. 이 함수가 일종의 오류보고를하도록 만들 수도 있습니다. 또한, cfupdate를 놓치지 않는 것에 대해 나쁘게 생각하지 마십시오. 적어도 P = 3 번 알아 차리기 전에 적어도 3 번 질문을 보았습니다. 그게 어떻게 작동하는지 재밌 네요. 실종 된 #이 있었다면, 내 두뇌는 그것에 대해 0 점이 될 것입니다. 그러나 그것이 전통적으로 제출하는 데 도움이되는 이유를 강조한 것입니다. CF는 당신에게 '멈추라 고 말했을 것입니다! :) –

+0

cfupdate가 명시된 문제를 해결 한 경우 대답으로 표시하고 계속 진행합니다. 후속 문제가있는 경우 새로운 질문을하십시오. –

관련 문제