【问题标题】:PHP Form Design Decision: Separation of responsibilityPHP 表单设计决策:职责分离
【发布时间】:2011-06-14 22:41:29
【问题描述】:

全部。

我一直在考虑 PHP 表单的设计决策,我希望得到比我更聪明的人的意见。

以下是基础知识:我有一个用户输入表单,可让人们为学校注册章节。我正在对表单字段进行输入验证,这让我 a) 清理数据和 b) 验证输入。然后我打算向注册的用户发送一封电子邮件(因为他们的电子邮件地址将在表单中提交)并将他们的信息写入 MySQL 数据库。

现在,我已经通过 POST 设置了数据验证部分(以及必要的错误消息),并且页面正在回发给自身以进行验证。这对我来说似乎是合乎逻辑的,因为我可以轻松保留经过清理的用户输入和显示错误(对于必填字段、数据类型等)。如果填写了所有必填字段并且数据有效,我想将用户重定向到包含额外信息的感谢页面。

(对不起,我太冗长了。我需要努力。)

问题是,如果可能的话,我想将验证逻辑和数据库写入/电子邮件逻辑完全分开。我最初的想法是在所有字段都有效的情况下重定向到感谢页面,但现在我认为感谢页面实际上应该包含写入数据库、发送电子邮件、然后打印感谢消息的逻辑.然而,这会使事情复杂化,并且涉及在不使用 GET 的情况下将 POST 数据传递到另一个页面。虽然我以前从来没有做过这样的事情(我对 PHP 还很陌生),但这显然是可能的(参见 hereherehere)并且有多种方法可以实现这一点。

不过,问题是 - 我是否应该尝试将这个逻辑分离到单独的 PHP 页面中?每个编程本能都告诉我“是的,去做吧,这是逻辑上的责任分离”....但是这是 PHP 中表单处理的最佳实践吗?任何有更多 PHP 经验的人都可以详细说明做这样的事情的利弊,以及他们的经验吗?你会怎么做?

【问题讨论】:

    标签: php forms post


    【解决方案1】:

    您所指的(如果您还不知道的话)是 MVC 模式设计的基础。在这种情况下,我可能会更进一步,将数据库和电子邮件逻辑与“谢谢”页面分开。您可以在模型中执行这些操作,并在成功后从控制器重定向以显示正确的视图。

    习惯这个概念可能需要一段时间,所以如果一开始很难掌握,我建议从强制 MVC 文件分离的 PHP 框架开始,比如 Codeigniter 或 CakePHP。这可以帮助你思考你的代码属于哪里。

    查看this document 以获得关于 PHP 中 MVC 模式的优秀入门,以及查看read about the pros and cons.

    【讨论】:

    • 将不得不对这个做相当多的阅读。不过,谢谢。
    【解决方案2】:

    您不需要分离页面来分离逻辑。您可以很容易地在其他文件中编写函数和操作,然后将它们导入。有一个 db.php 和一个 somthingelse.php 并使用 import 在你原来的 somthing.php 中使用它们的函数(或类,如果你(像我)一个 OOP 有点像人)......正如我所看到的,在之间传递敏感信息页面是有问题的,因为聪明的用户可以自己更改它。

    当您使用“GET”时,您需要准备好让您的用户在没有任何恶意的情况下乱用值,某些内容可能会被删除,或者他们将链接发送给朋友,或者可能发生其他事情。

    无论如何,请始终记住,每次在页面之间发送信息时都需要重新验证信息。

    编辑:我需要澄清一下,我指的是首先验证,然后通过 GET 或 POST 盲目地将信息传递到数据库逻辑......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多