(PHP) Является ли обработка отправки формы на той же странице более / менее / столь же хорошей, как обработка на отдельной странице? - PullRequest
4 голосов
/ 01 марта 2010

У меня есть форма PHP, и мне интересно, как я должен обрабатывать отправку. При изучении Rails я помню, что в этом случае имелась специальная страница-обработчик для формы, которая затем перенаправляла пользователя на целевую страницу, что предотвращало бы случайное повторное представление данных пользователем, нажав кнопку «Назад» и вернувшись к страница отправки формы.

Для моей формы PHP, во избежание таких ошибок (и в целях безопасности, как бы они ни играли), лучше ли отправлять данные формы по почте на страницу обработки, которую они перенаправляют пользователю? Или было бы нормально просто обрабатывать данные формы на той же странице, что и форма? Если я сделал последнее, может ли пользователь случайно повторно отправить данные, нажав назад / refresh / etc?

Ответы [ 3 ]

5 голосов
/ 01 марта 2010

Post-Redirect-Get - это шаблон дизайна, рекомендуемый для веб-форм для предотвращения повторной отправки (и того, что вы использовали в рельсах)

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

1 голос
/ 01 марта 2010

Те же принципы применимы к PHP. Перенаправление может помочь от случайного обновления формы. Однако вы все равно должны принять все необходимые меры предосторожности, чтобы избежать проблем со случайным обновлением (например, с помощью одноразовых токенов, проверки ввода и т. Д.).

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

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

0 голосов
/ 01 марта 2010

Есть третий способ, который мне особенно нравится.Чтобы отделить логику от представления, мне нравится включать файл PHP в каждый документ HTML, который требует какой-либо обработки (например, отображение динамических данных, обработка запросов HTTP POST и т. Д.).Я обычно храню этот файл в отдельном каталоге и называю его «filename.page.php».Излишне говорить, что это не что иное, как соглашение о кодировании, и вы можете назвать его как-то иначе.

В некотором смысле это означает, что вы обрабатываете запрос HTTP POST в том же файле (по крайней меречто касается вашего веб-сервера).В любом случае вы можете перенаправить клиентов, используя заголовок HTTP Location, например, так:

header("Location: file.php")

В качестве дополнительного примечания я не буду зависеть от HTTP POST для обеспечения безопасности;сделать произвольные запросы HTTP POST не сложнее, чем запросы HTTP GET.

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