Мне было интересно, что лучше всего подходит для обработки форм?
В моем случае я делаю что-то вроде этого:
Моя проблема в том, что я повторяю HTML-код для формы 3 раза, и я не думаю, что это хорошая практика (длинный файл, который трудно читать).
Вы должны следовать шаблону Post / Redirect / Get , чтобы предотвратить дублирование формы.
Вы можете интегрировать этот шаблон с обработкой ошибок и успешным отображением сообщений таким образом:
if POST_REQUEST: ERRORS = VALIDATE_FORM() if ERRORS IS EMPTY: PROCESS_REQUEST REDIRECT TO <Successful URL> DISPLAY_FORM(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" ... />
Ваш рабочий процесс выглядит правильно. Я не понимаю, почему вам нужно повторить HTML-код для формы. Реструктурируйте свой код, чтобы сообщение успеха отображалось в верхней части формы, если оно присутствует, и ошибки отображаются рядом с полями ввода, если они присутствуют. В верхней части вашего (PHP?) Файла обрабатывайте все и устанавливайте переменные, которые будут отображаться в форме ниже.
Вы можете использовать один и тот же код формы и просто отображать сообщение об ошибке / успехе над формой.
Послушай, это просто, как яйцо!
Просто выполните те же действия в другом порядке:
Если вы не можете жить без сообщения об успехе (совершенно бесполезная вещь, на мой взгляд), вы можете отобразить ее, используя параметр get (менее предпочтительный) или сеанс (оптимальный)
упс! это был старый.
вы можете разбить свой скрипт на две части:
один отображает форму
один получает данные формы, проверяет его и возвращает ошибки или сообщение об успешности
Я также хотел бы отметить, что использование шаблона и HTML5 является довольно хорошей практикой для предотвращения отправки формы с недопустимыми данными.
Учитывая, что в каждом случае вы показываете форму, можете ли вы просто отобразить ту же форму по умолчанию, а затем добавить дополнительные функции, такие как обмен сообщениями об ошибках и т. Д.?
Какие другие технологии вы используете?