Решение PHP Form Design: разделение ответственности - PullRequest
1 голос
/ 15 июня 2011

все.

Я размышлял над решением о дизайне для формы PHP, и мне хотелось бы, чтобы кто-то был умнее, чем я.

Вот основы: Iиметь форму ввода пользователя, которая позволяет людям зарегистрировать главу для школы.Я делаю проверку входных данных в полях формы, что позволяет мне а) очищать данные и б) проверять ввод.Затем я намереваюсь отправить электронное письмо зарегистрированному пользователю (так как его адрес электронной почты будет представлен в форме) и записать его информацию в базу данных MySQL.

Прямо сейчас у меня есть часть проверки данных(и необходимые сообщения об ошибках), настроенные через POST, и страница отправляется обратно для проверки.Это показалось мне логичным, поскольку я мог легко сохранять дезинфицированные вводимые пользователем данные и отображать ошибки (для обязательных полей, типов данных и так далее).Если все обязательные поля заполнены и данные верны, я бы хотел перенаправить пользователя на страницу благодарности с дополнительной информацией.

(Извините, я так многословен. Мне нужно над этим поработать.)

Дело в том, что я хотел бы полностью отделить логику валидации и логику записи / отправки по электронной почте, если это возможно.Моя первоначальная идея состояла в том, чтобы перенаправить на страницу благодарности, если все поля были действительны, но теперь я думаю, что страница благодарности должна на самом деле содержать логику для записи в БД, отправить электронное письмо, а затем распечатать сообщение спасибо,Это, однако, усложнит ситуацию и приведет к передаче данных POST на другую страницу без использования GET.Хотя раньше мне никогда не приходилось делать ничего подобного (я довольно новичок в PHP), это, по-видимому, возможно (см. здесь , здесь и здесь ) и есть несколько способов сделать это.

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

Ответы [ 2 ]

1 голос
/ 15 июня 2011

То, на что вы ссылаетесь (если вы еще не знаете), является основой MVC шаблонов .В этом случае я бы, вероятно, пошел бы дальше и отделил логику базы данных и электронной почты от страницы «Спасибо».Вы можете выполнить эти действия в своей модели и перенаправить в случае успеха с вашего контроллера на отображение правильного представления.

Может потребоваться некоторое время, чтобы привыкнуть к этой концепции, поэтому, если поначалу это трудно понять,Я бы предложил начать с PHP-фреймворка, который вызывает разделение файлов MVC, например Codeigniter или CakePHP.Это может помочь вам подумать о том, где находится ваш код.

Ознакомьтесь с этим документом , где вы найдете превосходный учебник по шаблонам MVC в PHP, и прочитайте о плюсах и минусах.

0 голосов
/ 15 июня 2011

вам не нужно разделять страницы, чтобы отделить логику.Вы можете довольно легко написать функции и действия в других файлах, а затем импортировать их.иметь один db.php и один somthingelse.php и использовать импорт, чтобы использовать их функции (или классы, если вы (как я) любитель ООП) в вашем оригинальном somthing.php ... Как я вижу, передача конфиденциальной информации междуСтраницы проблематичны, так как умный пользователь может изменить это сам.

Когда вы используете «GET», вы должны быть готовы к тому, что ваши пользователи будут возиться со значениями без какого-либо порочного намерения, что-то может быть удалено, или они отправят ссылку другу, или, возможно, произошло что-то еще.

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

РЕДАКТИРОВАТЬ: мне нужно уточнить, я ссылался на первую проверку, а затем вслепую передавая информациючерез GET или POST к логике базы данных ...

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