2008-09-26 2 views
4

У меня очень простой скрипт, который изменяет статус элемента в базе данных MySql - он отлично работает в IE7, но если я попробую его в Firefox, похоже, что он сработал, но не ... Что чрезвычайно странно.Простой скрипт ColdFusion работает в IE, но не в Firefox?

Код очень прост - сначала я получить подробную информацию о записи я ищу:

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

Это работает нормально, если я сбросить результаты, это просто содержание записи как ожидается. Поэтому я использую оператор if для изменения «активного» поля от одного до нуля или наоборот.

<!--- 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», оно отобразит слово «Актив», и если оно установлено на «ноль», оно отобразит «Отключено». Прост достаточно.

Если я запустил скрипт для отключения записи, Firefox фактически отобразит слово «отключено», как ожидалось, но запись базы данных не меняется!

Я в затруднении ... как серверный код отлично работает в одном браузере, а не в другом ?!

ответ

3

Я нашел причину проблемы ... Firebug.

Я не имею ни малейшего представления о том, что думает Firebug, если я удалю тег 'cflocation' из сценария (тот, который возвращает пользователя на страницу сводки), тогда он отлично работает. Но если я его сохраню, Firebug, похоже, снова запустит функцию перед пересылкой браузера на итоговую страницу.

У этого нет причин для этого. Непрозрачно.

По крайней мере, это не будет происходить на машинах клиентов.

3

Вы на 100% уверены, что запись в базе данных не изменяется? Вы можете получить это влияние, если firefox вызывает ваш скрипт дважды, один раз перед визуализацией страницы и один раз после.

Таким образом, продукт отключается, а затем после отправки страницы в браузер он снова обновляется (и поскольку он уже отключен, он снова включен).

Если вы добавили последнее обновление в базу данных и обновили его каждый раз, когда ваш продукт был изменен, вы сможете узнать, действительно ли это так.

EDIT: ответ на комментарии ниже, быстрое + грязное исправление будет состоять в том, чтобы сначала проверить последнюю метку времени обновления, и если ее с помощью n секунд текущего времени отклонить обновление.

Есть ли у вас плагины в firefox, которые могут быть повторно вызваны на страницу? возможно, для целей dev? простой тест, чтобы проверить, не изменит ли ваш скрипт или причуду в firefox ваш URL-адрес для получения формы с помощью метода post, поскольку браузер/плагин не должен повторно запрашивать почтовый запрос.

+0

Правильно вы ... Я добавил последнее обновленное поле, и оно действительно изменило ... но я не знаю, как FF дважды нажимает скрипт и не может понять, почему это ... идеи, как остановить это? – 2008-09-26 10:48:11

+0

Я видел неясную проблему в FF до того, как она наткнулась на символ, который он не распознает, и ему нужно повторно отобразить страницу в другом наборе символов и повторно отправить страницу для этого. У вас нет странных символов, которые сильно отличаются от вашего объявленного doctype? – ConroyP 2008-09-26 10:58:18

+0

Хмммммммммм ..... не то, что я знаю ... Я использую символ £ на результирующей странице, с которой у меня были проблемы в прошлом ... но не на странице, которая фактически делает базу данных звонки ... даже если он повторно отобразил страницу результатов, что не должно вызывать проблемы. – 2008-09-26 11:18:49

0

Попробуйте удалить точку с запятой в конце предложений WHERE в вашем SQL-коде.

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

Это может быть проблема кэширования браузера. Невозможно, чтобы используемый 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> 
2

код Вы разместили не является причиной ошибки, потому что это все на стороне сервера код - нет ничего происходит на стороне клиента там.

Я бы включил отладку CF (включая активность базы данных) и вставлял тег сразу после закрывающего тега и перед любым перенаправлением на страницу просмотра продукта. Запустите код и посмотрите на вывод отладки SQL.

Я предполагаю, что при использовании Firefox блок кода, содержащий запросы, просто не вызван.

0

все эти разные ответы, и никто из них не работал для меня. Мне пришлось перейти на другой форум, где кто-то сказал, что это приложение расширения расширения Skype в Firefox, которое заставляет базы ColdFusion сходить с ума или не работать. Я удалил расширение Skype (спасибо, Skype), и все было в порядке. Надеюсь, это сработает и для кого-то другого.