Как избежать нажатия пользователями браузерной кнопки "назад" и создания дублей в базе?
Есть форма, которую пользователь заполняет, сохраняет и у него открывается страница с только что заполненной формой в режиме просмотра.
Но особо умные пользователи если замечают ошибку нажимают кнопку «назад» в браузере и возвращаются на предыдущую страницу. Вносят исправления и нажимают кнопку «сохранить» создается практически идентичный дубликат предыдушей записи.
Когда то решил это проблему похоже… на странице, где была кнопка для перехода к форме создания записи, вместо перехода к самой форме был переход к промежуточной странице, которая создавала пустую запись с дефолтными значениями и открывала ее на редактирование… только нужно заранее проектировать базу данных на существование таких недоделанных записей (иногда соответствующий статус помогает).
Ну куки там — все написали. Собственно надо просто разделить — это совсем новый пользователь или уже не совсем — ошибка в одном поле или не прошедшая верификация должна приводить к возможности редактировать форму, а не тупо отказать или даже полный отлуп с заполнением заново.
Я делаю еще проще — я просто в таблице делаю уникальный индекс по ключевым полям. Например по мылу — оно однозначно идентифицирует пользователя. Или мыло плюс ник, ели он нужен ( хотя в этом случае лучше иметь два уникальных индекса по каждому полю ).
И в случае редактирования я просто пользую replace mysql ( там свои заморочки, но в целом очень удобно ).
А в случае заведомо новой формы — insert. И дубли не случаются.
Сделать возможность исправлять ошибки. При создании новой формы удалять старую. Короче, проблема не в пользователях и кнопке назад, а в вашем кривом приложении и непонимании поведения пользователей.
Сделать форму на AJAX. Если используете History.JS не заносите переход в историю. Дополнительно можнт в куки записывать были ли попытки использования формы и выводить что запись уже отправлена и.т.д в зависимости от того что у вас там.
Ну да, не создавать новую анкету с нуля, а менять существующую.
Общее правило — не надо пытаться запретить всё пользователю, лучше подстроиться под их поведение.
Всё-таки для пользователя интерфейсы существуют, а не наоборот.
Ну внёс я в куки новый id только что заполненной анкеты.
Пользователь нажал кнопку «назад» и у него открылась только форма с заполненными им полями и при попытке сохранения я должен проверять на сервере куки на предмет есть ли там id и если есть то обновлять запись, такой алгоритм?
Может при просмотре выводить надпись типа: «Заметили ошибку? Исправить» кнопка исправить кидает на страницу с формой редактирования данных. Или же можно сделать редактирование каждого поля с помощью аякса.