2011-06-14 44 views
1

全部。PHP表单设计决策:职责分离

我一直在想一个PHP表单的设计决策,我想要一些比我更聪明的人的输入。

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

现在,我已经获得了通过POST设置的数据验证部分(以及必需的错误消息),并且该页面将发回给自己进行验证。这对我来说似乎是合乎逻辑的,因为我可以轻松地保留消毒的用户输入和显示错误(对于必填字段,数据类型,whatnot)。如果所有必填字段都已填写且数据有效,我希望将用户重定向到带有额外信息的感谢页面。

(对不起,我这么详细。我需要在这项工作。)

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

这个问题虽然 - 我应该甚至试图在单独的PHP页面中分离这种逻辑吗?每种编程本能都会告诉我“是的,做到了,这是责任的逻辑分离”......但这是PHP中表单处理的最佳做法吗?任何拥有更多PHP体验的人都可以详细说明做这种事情的利弊,以及他们的经历吗?你会怎么做?

回答

1

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

需要一段时间才能习惯这个概念,所以如果起初很难理解,我会建议从强制MVC文件分离的PHP框架开始,如Codeigniter或CakePHP。这可以帮助您考虑代码所属的位置。

退房this document有关在PHP MVC模式的一个很好的引物和read about the pros and cons.

+0

将不得不做的阅读在这一个不少。不过谢谢你。 – 2011-06-15 16:32:12

0

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

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

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

编辑:我要澄清,我提到先验证,然后盲目地传递信息通过GET或POST到数据库逻辑...