Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Документы Word на сайте и повторная отправка данных


Бич F5. Как бороться с повторной отправкой данных

14.06.2007 

Когда человек заполняет форму и нажимает на кнопку «Отправить», может случиться всякое. Например, серверная часть может нормально отработать, а ответ клиенту не дойдет. Что мы (пользователи) тогда делаем? Ясное дело, нажимаем F5. Запрос отправляется еще разок с теми же данными. Серверная часть снова отрабатывает и на это раз возвращает ответ — страницу с продублированным комментарием (новостью, товаром, постом на форуме). Сталкивались с этим явлением?

Как же распространенную проблему решить? У меня четыре варианта.

1. Перед записью в базу данных можно делать запрос на предмет наличия в таблице отправляемого текста. Лишний не очень быстрый запрос. Нужно писать код проверки.

2. Можно установить для пользователя ограничение по времени, скажем, одна запись в базу в течение 30 секунд. Всё равно нужно писать код.

3. Есть вариант с редиректом: сервер возвращает легкую страничку, с которой пользователь мгновенно куда-нибудь перенаправляется. Недостаток — если легкая страничка не дойдет, то дублирования не избежать.

4. Делаем UNIQUE-индекс в таблице. Можно по нескольким полям. Смотрим, если MySQL возвращает код ошибки 1062, значит, данные уже записались. На данный момент это мой выбор. Я правда не уверен, что использую этот тип индекса по назначению, но каких-то недостатков не замечал.

Кстати, по неизвестным причинам большинство популярных CMS не решают проблему повторной записи данных. Wordpress получает плюсик.

25 ценных комментариев

--- 

Как лучше размещать на сайте DOC, RTF, XLS, PPT, PDF

19.06.2007 / 4 комментария

Когда на сайте нужно выложить документ Word, передо мной встает дилемма:
* заархивировать файл и поставить ссылку на архив,
* оставить файл в формате DOC и поставить на него ссылку,
* преобразовать документ в HTML и сделать его полноценной частью сайта.

И что же я выбираю?

Читать дальше…

---

Дмитрий Сергеев

dima.sergeev@gmail.com

http://dserg.com


В избранное