При отправке данных на сервер, иногда требуется сохранить информацию введённую пользователем в форму. Это случается, когда добавлению данных помешали ошибки заполнения самой формы и потерять их ой как не хочется. После возврата на страницу формы, требуется восстановить все значения полей и показать ошибки, которые помешали добавлению данных.
На самом деле ничего сложного в этом нет, просто сохранять значения полей в переменные сессии и пользователи будут довольны что о них заранее позаботились. Но есть одно но. Формы и обработчики, особенно если много полей, так разрастаются, что даже типичная форма из пяти шести полей всегда выходила мне в несколько мониторов кода.
Всевозможных проверок много, каждая требует сохранить ошибку, если таковая есть, а так же сохранить значения поля в сессию в любом случае, потому что соответствие условиям данных, которые проверяются в первую очередь, вовсе не обозначает, что дальнейшие проверки других полей будут тоже успешно пройдены. Можно конечно поступить другим образом, проверив абсолютно все поля и в случае выявления ошибок, тогда уже собирать все данные в сессию. Это более правильный вариант, потому что если форма заполнена корректно, то ничего в сессию писать не придется. Я покажу оба варианта, на самом деле они практически не отличаются.
Так же сильно раздувается и форма, там тоже нужно делать проверки на существование ошибок, чтобы их показать, на существование сохраненной информации для каждого поля, нужно также не забыть обработать данные от xss, вообщем тоже немало писанины. Из-за всех этих заморочек формы и обработчики аж не хотелось порой писать, настолько нудное это было дело. Но писать форм приходилось много и каждую последующую приходилось упрощать. И так я упрощал то тех пор, пока меня не осенило как это легко и коротко можно делать.
Нужно просто привести все однотипные действия к общему знаменателю, обернуть каждое такое действие гибкой оболочкой, через которую будет удобно применить ее к любому полю, но так, чтобы при этом несколько последовательных или параллельных форм, имея одинаковые поля, не забивали друг друга. Речь идет о текстовых полях, так как поставить чекбокс это мелочи, а вот потерять пусть даже небольшой параграф текста жутко неприятно. И так, определим эти самые действия.
Начнем с обработчиков.
Пишу я на php, поэтому и примеры буду показывать тоже на php. Показать я хочу не как именно нужно делать, а сам алгоритм облегчения такого рутинного занятия, не применяя фреймворки. Если вы используете процедурный подход при написании кода и до сих пор так не делали, то вам обязательно понравится методика упрощения, а создание форм и обработчиков к ним — будет вам отныне в радость. Поехали.