(PHP)在同一页面上处理表单提交是否比在单独页面上处理好?

(PHP)在同一页面上处理表单提交是否比在单独页面上处理好?,php,forms,Php,Forms,我有一个PHP表单,我想知道我应该如何处理提交。我记得在学习Rails时,行为是为表单设置一个特殊的处理程序页面,然后将用户重定向到登录页面,这将通过点击“上一步”按钮并返回表单提交页面来防止用户意外地重新提交数据 对于我的PHP表单,为了避免此类错误(以及为了安全性,不管它可能会起到什么作用),是否最好通过post将表单数据发送到处理页面,然后重定向用户?或者只在与表单相同的页面上处理表单数据可以吗?如果我使用了后者,用户是否可能通过回击/刷新等方式意外地重新提交数据?同样的原则也适用于PHP

我有一个PHP表单,我想知道我应该如何处理提交。我记得在学习Rails时,行为是为表单设置一个特殊的处理程序页面,然后将用户重定向到登录页面,这将通过点击“上一步”按钮并返回表单提交页面来防止用户意外地重新提交数据


对于我的PHP表单,为了避免此类错误(以及为了安全性,不管它可能会起到什么作用),是否最好通过post将表单数据发送到处理页面,然后重定向用户?或者只在与表单相同的页面上处理表单数据可以吗?如果我使用了后者,用户是否可能通过回击/刷新等方式意外地重新提交数据?

同样的原则也适用于PHP。重定向有助于防止意外刷新表单。但是,您仍然应该采取必要的预防措施,以避免意外刷新(例如,使用一次性令牌、验证输入等)带来的问题

我使用我自己的MVC风格的框架,它只是让调度器在每个页面视图上查找表单帖子,并调用适当的控制器来处理请求(假设只满足一次提交要求)。然后将浏览器重定向到相应的登录页

当然,您可以发布到同一个页面,但我认为这会导致错误的做法,例如将过多的逻辑、html和数据库访问混合在一起。

是推荐用于web表单的设计模式,以防止重新提交(以及您在rails中使用的设计模式)


不管你是提交到同一个页面还是另一个页面,都是重定向阻止了意外的重新提交。因此,根据您的编码风格和/或应用程序语义,您可以选择是发布到同一页面还是单独的页面。

还有第三种方法,我特别喜欢。为了将逻辑与表示分离,我喜欢在需要某种处理(例如显示动态数据、处理HTTP POST请求等)的每个HTML文档中包含一个PHP文件。我通常将此文件存储在单独的目录中,并将其命名为“filename.page.php”。不用说,这只不过是一种编码约定,您可以将其称为其他名称

从某种意义上说,这意味着您正在同一个文件中处理HTTPPOST请求(至少就您的web服务器而言)。尽管如此,您仍然可以使用HTTP
Location
头重定向客户端,如下所示:

标题(“位置:file.php”)

顺便说一句,我不会依赖HTTP POST来实现安全性;生成任意HTTP POST请求并不比生成HTTP GET请求困难