Pergunta

Eu tenho um pouco muito simples de script que altera o status de um item em um banco de dados MySql - ele funciona bem no IE7, mas se eu tentar isso no Firefox, parece que ele trabalhou, mas não tem ... que é extremamente estranho.

O código é muito simples - primeiro eu recebo os detalhes do disco que eu estou procurando:

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

Esta multa é trabalhar, se eu despejar os resultados, é apenas o conteúdo do registro como o esperado. Então eu usar uma instrução if para alterar o campo 'ativo' de um para zero ou vice-versa.

<!--- 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>

Eu não posso ver qualquer que seja a razão para que isso não trabalho ... e, na verdade, no IE7 ele funciona perfeitamente ...

O que acontece é após este script é executado, o navegador vai voltar para a página que exibe todos esses registros. Para cada registro, se o campo 'bActive' está definido como '1', ele irá exibir a palavra 'Active' e se ele é definido como 'zero', ele irá mostrar 'Desativado'. bastante simples.

Se eu executar o script para desativar um registro, Firefox realmente exibe a palavra 'deficiente' como esperado, mas o registro de banco de dados não muda!

Eu estou em uma perda ... como do lado do servidor código de trabalho bem em um navegador, e não em outro?!

Foi útil?

Solução 2

Eu encontrei a causa do problema ... Firebug.

Não tenho a menor idéia do que Firebug pensa que está fazendo, se eu remover a tag 'cflocation' a partir do roteiro (o que leva a parte de trás do usuário para a página de resumo), em seguida, ele funciona bem. Mas se eu mantê-lo em, Firebug parece estar a correr novamente a função antes de encaminhar o navegador para a página de resumo.

Não há nenhuma razão para ele estar fazendo isso. Un-bloody-belivable.

Pelo menos ele não vai estar acontecendo em máquinas dos clientes.

Outras dicas

Você está 100% certo de que o registro de banco de dados não muda? Você pode obter este efeito se firefox te chama roteiro duas vezes, uma vez antes da página é processada e uma vez depois.

Assim, o produto fica definido para desativado, em seguida, depois que a página é enviada para o navegador é atualizado novamente (e como já está desativado, é re-ativado).

Se você tem adicionar um último campo atualização para o banco de dados e atualização que cada vez que seu produto é alterado, então você seria capaz de dizer se este for o caso.

EDIT:. Responder a comentários abaixo, uma rápida correção + sujo seria verificar o último carimbo de tempo de atualização primeiro e se o seu com no n segundos do tempo atual descartar a atualização

Você tem plug-ins no Firefox que talvez re-chamar a página? talvez para fins dev? um simples teste para ver se o seu o seu script ou uma peculiaridade no firefox seria mudar o seu url chegar a um formulário com um método post, como o navegador / plug-in não deve voltar a chamar um pedido post.

O código que você postou não é a causa do erro, porque é todo o código do lado do servidor -. Não há nada acontecendo no cliente lá

eu ligar CF depuração (incluindo a atividade de banco de dados) e ficar um direito tag depois da tag de fechamento, e antes de qualquer volta redirecionamento para a página de visualização do produto. Executar o código e olhar para a saída SQL depuração.

Meu palpite é que, ao usar o Firefox o bloco de código contendo as consultas simplesmente não são chamados.

Isto pode ser um problema de cache do navegador. Não há nenhuma maneira que o código CF reta poderia ser afetado pelo navegador que está sendo usado. O que acontece se você atualizar a página em que você está exibindo os produtos? Você também precisa olhar para o banco de dados diretamente para ver se o valor está mudando ou não.

Em um pouco de uma tangente, você pode eliminar a necessidade de uma declaração se em tudo com um pouco de matemática simples.

<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>

Tente remover o ponto e vírgula no final de suas cláusulas WHERE em seu código SQL.

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

todas essas respostas diferentes, e nenhum deles funcionou para mim. Eu tinha que ir para outro fórum onde alguém disse que era a extensão Addon Skype no Firefox que faz com que os bancos de dados do ColdFusion para ir função louco ou não. Eu desinstalado a extensão Skype (obrigado, Skype) e tudo voltou ao normal. Espero que isso funciona para outra pessoa também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top