所有
我一直在考虑PHP表单的设计决策,我想要比我更聪明的人提供一些意见。
以下是基础知识:我有一个用户输入表单,可以让人们为学校注册章节。我正在表单字段上进行输入验证,这让我a)清理数据并b)验证输入。然后,我打算向注册的用户发送电子邮件(因为他们的电子邮件地址将在表单中提交),并将他们的信息写入MySQL数据库。
现在,我已经通过POST设置了数据验证部分(以及必要的错误消息),并且该页面将回发给自己进行验证。这对我来说似乎合乎逻辑,因为我可以轻松地保留已清理的用户输入和显示错误(对于必填字段,数据类型,诸如此类)。如果填写了所有必填字段且数据有效,我想将用户重定向到感谢页面并提供额外信息。
(对不起,我很啰嗦。我需要继续努力。)
事情是,如果可能的话,我想完全分离验证逻辑和数据库写/电子邮件逻辑。我最初的想法是,如果所有字段都有效,则重定向到感谢页面,但现在我认为感谢页面实际上应包含写入数据库的逻辑,发送电子邮件,然后打印感谢信息。但是,这会使事情变得复杂,并且涉及将POST数据传递到另一个页面而不使用GET。虽然我以前从未做过这样的事情(我对PHP很新),但这显然是可能的(见here,here和here)多种方法来实现这一目标。
但问题是,我是否应该尝试在单独的PHP页面中分离这个逻辑?每一种编程本能告诉我“地狱是的,做到这一点,这是一种逻辑上的责任分离”......但这是PHP中表单处理的最佳实践吗?任何拥有更多PHP经验的人都可以详细说明做这样的事情和他们的经历的利弊吗?你会怎么做?
答案 0 :(得分:1)
您所指的(如果您还不知道)是 MVC模式设计的基础。在这种情况下,我可能更进一步,将数据库和电子邮件逻辑与Thank You页面分开。您可以在模型中执行这些操作,并在成功时从Controller重定向以显示正确的视图。
习惯这个概念需要一段时间,所以如果一开始很难掌握,我建议从强制MVC文件分离的PHP框架开始,比如Codeigniter或CakePHP。这可以帮助您考虑代码所属的位置。
查看this document有关PHP中MVC模式的优秀入门,read about the pros and cons.
答案 1 :(得分:0)
您不需要将页面分开来分隔逻辑。您可以非常轻松地在其他文件中编写函数和操作,然后导入它们。有一个db.php和一个somthingelse.php并使用import来使用他们的函数(或类,如果你(像我)一个OOP有点家伙)在你原来的somthing.php中......正如我所看到的那样,在两者之间传递敏感信息页面是有问题的,因为聪明的用户可以自己更改它。
当你使用“GET”时,你需要准备好让你的用户在没有任何恶意的情况下搞乱这些值,可能会删除某些东西,或者他们发送链接给朋友,或者可能发生其他事情。
无论如何,总是记得每次在页面之间发送信息时都需要重新验证信息。 编辑:我需要澄清,我提到首先验证,然后盲目地通过GET或POST传递信息到数据库逻辑......