Лучшая практика для обработки форм - PullRequest
3 голосов
/ 04 июня 2010

Мне было интересно, как лучше всего обрабатывать формы?

В моем случае я делаю что-то подобное:

  • , если пользователь не отправил форму
    • отобразить форму
  • еще
    • если есть ошибки формы
      • ошибки отображения
      • снова отобразить форму
    • еще
      • отобразить сообщение об успехе
      • (и) снова отобразить форму

Моя проблема в том, что я повторяю код HTML для формы 3 раза и не думаю, что это хорошая практика (длинный файл, трудно читаемый).

Ответы [ 7 ]

5 голосов
/ 23 июня 2010

Вы должны следовать шаблону Post / Redirect / Get , чтобы избежать дублирования при отправке формы.

Этот шаблон можно интегрировать с обработкой ошибок и успешным отображением сообщений следующим образом:

if POST_REQUEST:
  ERRORS = VALIDATE_FORM()
  if ERRORS IS EMPTY:
    PROCESS_REQUEST
    REDIRECT TO <Successful URL>

DISPLAY_FORM(ERRORS)

Это возможные сценарии:

  • Получить запрос по URL-адресу формы:
    POST_REQUEST имеет значение false, поэтому вы просто отображаете форму без ошибок (так что обычная пустая форма)
  • Отправка формы с ошибками:
    POST_REQUEST имеет значение true, вы проверяете форму. В этом случае некоторые ошибки будут возвращены в переменной ERRORS (возможно, в массиве). Переменная ERRORS не пуста, поэтому вы просто отображаете форму с сообщениями об ошибках
  • Правильная отправка формы:
    POST_REQUEST имеет значение true, и вы проверяете форму. С этого времени форма действительна, переменная ERRORS будет пустой, и вы выполните перенаправление на , который отобразит успешное сообщение пользователю.

Используя этот шаблон, вы не позволяете пользователю снова отправлять данные формы при обновлении страницы после правильной отправки формы.

Django Framework предлагает обрабатывать формы таким образом.

Хороший способ обработки ошибок при отображении формы состоит в том, чтобы функция VALIDATE_FORM () возвращала ассоциативный массив ошибок , где каждый ключ - это имя поля, а соответствующий элемент - массив ошибок. сообщения.

Общие ошибки формы (не связанные с указанным полем) должны иметь ключ emtpy.

Таким образом, например, вы можете отображать ошибки в функции DISPLAY_FORM ():

<ul class="errors"><?php foreach(ERRORS['field_name'] as $error) { echo "<li>$error</li>"; } ?></ul>
<input name="field_name" type="text" ... />
2 голосов
/ 04 июня 2010

Ваш рабочий процесс выглядит правильно.Я не понимаю, почему вам нужно повторить HTML-код для формы.Перестройте код так, чтобы сообщение об успехе отображалось в верхней части формы, если оно присутствует, и ошибки отображались рядом с полями ввода, если они присутствуют.В верхней части вашего (PHP?) Файла обработайте все и установите переменные, которые будут отображаться в форме ниже.

1 голос
/ 23 июня 2010

Смотри, это так же просто, как яйцо!
Просто поместите те же действия в другом порядке:

  • если пользователь отправил форму
    • если есть ошибки формы
      • заполнить массив ошибок
    • еще
      • запись данных в базу данных
      • 302 regirect, как того требует стандарт HTTP
      • выход
  • если есть ошибки
    • ошибки отображения
    • заполнить поля формы значений
  • показать форму

Если вы не можете жить без сообщения об успехе (на мой взгляд, довольно бесполезная вещь), вы можете отобразить его, используя параметр get (менее предпочтительный) или сеанс (оптимальный)

упс! это был старый.

1 голос
/ 04 июня 2010

Вы можете использовать тот же код формы и просто отобразить сообщение об ошибке / успехе над формой.

0 голосов
/ 19 августа 2015

Я также хотел бы отметить, что использование шаблонов и HTML5 является хорошей практикой для избежания отправки форм с неверными данными.

0 голосов
/ 23 июня 2010

Вы можете разбить ваш скрипт на две части:

  • отображается форма

  • можно получить данные формы, проверить их и вернуть ошибки или сообщение об успехе

0 голосов
/ 04 июня 2010

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

Какие еще технологии вы используете?

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