Каковы некоторые рекомендации для многошаговых форм в Coldfusion? - PullRequest
1 голос
/ 16 сентября 2010

У меня есть трехступенчатая форма, где каждый шаг отправляет свое собственное действие. Действие перенаправляет на следующий шаг. Данные хранятся в области сеанса. У меня есть фильтр, который запрещает пользователю доступ к обработчикам форм с помощью чего-либо, кроме почтового запроса.

Однако ничто не мешает кому-то вручную вводить адрес шага. Для решения этой проблемы я установил переменную currentStep в сеансе.

<!--- Some data is processed here --->
<cfset session.currentStep = "stepTwo">

И на втором шаге я бы проверил наличие structkey:

<cfif NOT session.currentStep = "stepTwo">
<!--- redirect to #session.currentStep# --->

Этот подход работает, но имеет существенный недостаток: пользователь не может нажать кнопку «Назад» в окне браузера или редактировать любые данные, которые он или она уже ввели.

Каковы лучшие практики для реализации многошаговой формы? Могу ли я улучшить свой процесс, включив в него функциональность кнопки «назад»?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Вместо того, чтобы использовать переменную сеанса, чтобы разрешить им только доступ к текущему шагу, разрешите им доступ к текущему или предыдущему шагу.Вроде флага «как далеко вы можете пройти».

Теперь добавьте ссылки к предыдущим шагам, например, крошку.

Наконец, используйте поиск в постоянном хранилище (db, session, xml, bag of holding и т. Д.) Для данных, уже введенных для этой формы.Создайте пустой набор данных формы, перезапишите все, что находится в постоянном хранилище, а затем перезапишите что-нибудь из самой области формы.Что-то вроде:

populate = structNew(); // this is the data to populate your form with on load
populate.someValue = "";
structappend(populate, dataFromStorage);
structappend(populate, form); // from things submitted from the form scope, in case validation fails
<input type="text" name="someValue" value="#variables.populate.someValue">

Теперь, если кто-то дважды нажимает на один и тот же шаг формы, он увидит (в порядке приоритета) значения, которые они отправили, но не прошли проверку, значения из постоянных данных.магазин, а затем пустую форму.

2 голосов
/ 16 сентября 2010

Вы можете продолжать использовать сессионный подход, если хотите.

Чтобы устранить главный недостаток, вы можете немного изменить свою логику.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...