문제

MySQL 데이터베이스에서 항목의 상태를 변경하는 매우 간단한 스크립트가 있습니다. IE7에서는 잘 작동하지만 Firefox에서 시도하면 작동하는 것처럼 보이지만 극도로 보이지 않습니다. 이상한.

코드는 매우 간단합니다 - 먼저 내가 찾고있는 레코드의 세부 사항을 얻습니다.

<cfscript>
// Get the Product Attribute details
Arguments.qGetProductAttribute = Application.cfcProducts.getProductAttributes(Arguments.iProductAttributeID);
</cfscript>

이것은 잘 작동합니다. 결과를 덤프하면 예상대로 레코드의 내용 일뿐입니다. 따라서 IF 문을 사용하여 '활성'필드를 1에서 0으로 또는 그 반대를 변경합니다.

<!--- If Product Attribute is active, mark as inactive --->
<cfif Arguments.qGetProductAttribute.bActive EQ 0>
    <cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET     bActive = <cfqueryparam value="1" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
    </cfquery>

<!--- Else if Product Attribute is inactive, mark as active --->
<cfelseif Arguments.qGetProductAttribute.bActive EQ 1>
    <cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET     bActive = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
    </cfquery>
</cfif>

나는 이것이 작동하지 않는 이유를 볼 수 없습니다 ... 그리고 실제로, IE7에서 그것은 완벽하게 작동합니다 ...

이 스크립트가 실행되면 브라우저는 이러한 모든 레코드를 표시하는 페이지로 돌아갑니다. 각 레코드마다 'bactive'필드가 '1'으로 설정되면 'active'라는 단어가 표시되고 'Zero'로 설정되면 '비활성화'가 표시됩니다. 충분히 간단합니다.

레코드를 비활성화하기 위해 스크립트를 실행하면 Firefox는 실제로 예상대로 '비활성화'라는 단어를 표시하지만 데이터베이스 레코드는 변경되지 않습니다!

나는 손실에있다 ... 서버 측 코드는 어떻게 한 브라우저에서 다른 브라우저에서 잘 작동 할 수 있습니까?!

도움이 되었습니까?

해결책 2

문제의 원인을 찾았습니다 ... Firebug.

FireBug가 어떻게 생각하는지, 스크립트에서 'Cflocation'태그를 제거하면 (사용자를 요약 페이지로 다시 가져 오는 지)는 잘 작동합니다. 그러나 보관하면 FireBug는 브라우저를 요약 페이지로 전달하기 전에 기능을 다시 실행하는 것 같습니다.

이 작업을 수행 할 이유가 없습니다. 혈액 신사.

적어도 고객의 기계에서는 일어나지 않을 것입니다.

다른 팁

데이터베이스 레코드가 변경되지 않는다고 100% 확신하십니까? Firefox가 페이지가 렌더링되기 전에 한 번, 후 한 번은 스크립트를 두 번 호출하면이 영향을받을 수 있습니다.

따라서 제품이 비활성화 된 상태로 설정된 다음 페이지가 브라우저로 전송 된 후 다시 업데이트됩니다 (이미 비활성화 된 상태에서 다시 활성화됩니다).

데이터베이스에 마지막 업데이트 필드를 추가하고 제품이 수정 될 때마다이 경우에 해당되는지 알 수 있습니다.

편집 : 아래의 주석에 응답하면 Quick + Dirty Fix는 마지막 업데이트 타임 스탬프를 먼저 확인하고 현재 시간의 N 초에있는 경우 업데이트를 기각하는 것입니다.

Firefox에 페이지를 다시 발사하는 플러그인이 있습니까? 아마도 개발 목적으로? 브라우저/ 플러그인이 게시물 요청을 다시 부르지 않아야하므로 스크립트 또는 Firefox의 기발한 것이 포스트 메소드가있는 양식으로 변경하는 것이 쉬운 테스트입니다.

게시 한 코드는 모든 서버 측 코드이기 때문에 오류의 원인이 아닙니다. 클라이언트에는 아무 일도 일어나지 않습니다.

CF 디버깅 (데이터베이스 활동 포함)을 켜고 닫는 태그 직후에 그리고 제품보기 페이지로 다시 방향을 바꾸기 전에 태그를 고수합니다. 코드를 실행하고 SQL 디버그 출력을보십시오.

내 생각에 Firefox를 사용할 때 쿼리가 포함 된 코드 블록은 호출되지 않습니다.

이것은 브라우저 캐싱 문제 일 수 있습니다. 브라우저를 사용하여 직선 CF 코드에 영향을 줄 수있는 방법은 없습니다. 제품을 표시하는 페이지를 새로 고치면 어떻게됩니까? 또한 값이 변경되는지 여부를 확인하기 위해 데이터베이스를 직접 살펴 봐야합니다.

약간의 탄젠트에서는 약간 간단한 수학으로 IF 문의 필요성을 제거 할 수 있습니다.

<cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET
         bActive = <cfqueryparam value="#val(1 - Arguments.qGetProductAttribute.bActive)#" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   
        iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
</cfquery>

SQL 코드의 클로스가있는 곳에서 세미콜론을 제거하십시오.

WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;

그 모든 다른 답변과 그들 중 누구도 나를 위해 일하지 않았습니다. 나는 누군가가 Firefox의 Skype Extension Addon이라고 말하면서 Coldfusion 데이터베이스가 미치거나 기능하지 않도록하는 다른 포럼으로 가야했습니다. 나는 Skype 확장자 (감사합니다, Skype)를 제거했고 모든 것이 정상으로 돌아 왔습니다. 이것이 다른 사람에게도 효과가 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top