Question

J'ai un script très simple qui modifie le statut d'un élément dans une base de données MySql - cela fonctionne très bien dans IE7, mais si j'essaie dans Firefox, il semble que cela ait fonctionné, mais ne l'a pas ... Ce qui est extrêmement étrange.

Le code est très simple. Je reçois d’abord les détails de l’enregistrement recherché:

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

Cela fonctionne bien, si je viderais les résultats, ce serait juste le contenu de l'enregistrement comme prévu. Alors, j’utilise une instruction if pour changer le champ "actif" de un à zéro 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>

Je ne vois aucune raison pour que cela ne fonctionne pas ... et en effet, dans IE7, cela fonctionne parfaitement ...

Ce qui se passe après l’exécution de ce script, le navigateur revient à la page qui affiche tous ces enregistrements. Pour chaque enregistrement, si le champ "bActive" est défini sur "1", il affiche le mot "Actif" et s'il est défini sur "zéro", il indique "Désactivé". Assez simple.

Si j'exécute le script pour désactiver un enregistrement, Firefox affiche le mot "désactivé" comme prévu, mais l'enregistrement de la base de données ne change pas!

Je suis perdu ... comment un code côté serveur peut-il fonctionner correctement dans un navigateur et pas dans un autre?!

Était-ce utile?

La solution 2

J'ai trouvé la cause du problème ... Firebug.

Je ne sais pas du tout de ce que Firebug pense faire, si je supprime la balise 'cflocation' du script (celle qui ramène l'utilisateur à la page de résumé), alors tout fonctionne correctement. Mais si je le conserve, Firebug semble exécuter la fonction à nouveau avant de transférer le navigateur vers la page de résumé.

Il n’ya aucune raison pour que cela se produise. Non-sanglante-croyable.

Au moins, cela ne se produira pas sur les ordinateurs des clients.

Autres conseils

Êtes-vous sûr à 100% que l'enregistrement de la base de données ne change pas? Vous pourriez avoir cet effet si Firefox appelle votre script deux fois, une fois avant et une fois après le rendu de la page.

Le produit est donc désactivé, puis une fois la page envoyée au navigateur, il est à nouveau mis à jour (et comme il est déjà désactivé, il est réactivé).

Si vous avez ajouté un dernier champ de mise à jour à la base de données et mis à jour chaque fois que votre produit est modifié, vous serez en mesure de savoir si tel est le cas.

EDIT: en réponse aux commentaires ci-dessous, un correctif rapide + sale consisterait à vérifier le dernier horodatage de la mise à jour en premier et si, dans les n secondes, l'heure actuelle est rejetée, la mise à jour.

Avez-vous des plug-ins dans Firefox qui pourraient peut-être rappeler la page? peut-être à des fins de développement? un test simple pour voir si c’est votre script ou une folie dans firefox serait de changer l’URL de votre get en un formulaire avec une méthode de publication, car le navigateur / plug-in ne doit pas rappeler une demande de publication.

Le code que vous avez publié n'est pas la cause de l'erreur car il s'agit uniquement du code côté serveur. Il ne se passe rien sur le client.

J'activerais le débogage CF (y compris l'activité de la base de données) et collerais une balise juste après la balise de fermeture et avant toute redirection vers la page de vue du produit. Exécutez le code et examinez la sortie de débogage SQL.

À mon avis, lors de l'utilisation de Firefox, le bloc de code contenant les requêtes n'est pas appelé.

Ceci peut être un problème de mise en cache du navigateur. En aucun cas, le code utilisé par les FC ne soit affecté par le navigateur utilisé. Que se passe-t-il si vous actualisez la page sur laquelle vous affichez les produits? Vous devez également consulter directement la base de données pour voir si la valeur change ou non.

Un peu tangente, vous pouvez éliminer le besoin d'une instruction if avec un peu de maths 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>

Essayez de supprimer le point-virgule à la fin de vos clauses WHERE dans votre code SQL.

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

toutes ces réponses différentes, et aucune d’entre elles n’a fonctionné pour moi. Je devais me rendre sur un autre forum où quelqu'un a dit que c'était l'additif d'extension Skype dans Firefox qui faisait que les bases de données ColdFusion devenaient fous ou ne fonctionnaient plus. J'ai désinstallé l'extension Skype (merci, Skype) et tout était rentré dans l'ordre. J'espère que ça marche aussi pour quelqu'un d'autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top