我是开发PHP表单的新手,目前正在尝试理解和了解它们的处理方式。如果我理解正确,有两种方法可以使用" Action"属性。
方法A:使用单独的PHP文件来处理表单。所以在你的第一个文件(Form.php)中,你有表单和提交按钮的代码。然后在ProcessForm.php文件中,放置所有代码以验证数据。在这种情况下,您将表单定义为
<form method="post" action="ProcessForm.php" >
方法B:将一个PHP文件用于所有内容,包括表单代码,提交按钮和所有验证内容(如果表单字段未正确输入,则包括错误消息的输出)。在这里,您将表单定义为
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
现在,我不明白其中一种方法是否更正确,或者为什么要使用其中一种方法。
我看到一个表单有四个组件:表单的HTML,用于连接MySQL的PHP,用于输入验证/清除/错误打印输出的PHP,以及用于将数据移动到MySQL数据库的PHP。我希望我的表格能够(在提交时)工作如下:
目前我正在使用方法B,并已成功实施#1。但我还没有达到#2。所以在这个漫长的故事之后,我的问题是:我应该把这四个组件放在哪里?在一两个文件中,为什么?
答案 0 :(得分:0)
如果您要发布生成表单的脚本,那么您甚至不需要操作。所以方法3是:
<form method="post">
这是最好的版本,因为它不会破坏并清楚地表明一个脚本呈现并处理表单的帖子。
您的其他方法都不是理想。真的,你应该看(Smarty或类似的东西)让你模板化HTML并将显示与逻辑分开。说过两个选项1&amp; 2是完全可以接受的 - 如果你选择不使用上面的(上级)选项3。
答案 1 :(得分:0)
我不能说“最佳实践”,但是你提到的4个“组件”,我认为缺少的关键项目也是客户端验证(通常是javascript)。这样可以节省处理在提交给服务器处理之前已经过验证的表单的“往返”开销。
有了这样说(并且因为它是我使用的方法),你将合并一些javascript,所以我所做的是使用javascript来验证我的字段“on submit”(我用javascript覆盖表单的默认提交事件处理程序),然后,如果它验证,执行提交。我用ajax做这个,或者你可以使用标准的javascript来提交表单。您甚至可以使用javascript动态设置“action”属性(假设您需要 - 请参阅@Paul的推理,为什么您可能不需要)。
它提交的php文件通常会进行0演示工作。它连接到数据库,保存“post'ed”信息,关闭连接,并返回状态(这通常是我喜欢ajax的原因,因为我更容易处理该状态响应)。根据状态响应,您可以显示错误消息(如警报,引导模式或信息警报等)或成功消息/重定向。
虽然我的答案不提供代码,但我认为上述方法可以根据您的问题更好地为您服务。一旦你理解了你想要采取的步骤,“如何”是一个简单的部分。
答案 2 :(得分:0)
这两种方法都不正确&#34 ;;两者都同样有效,你选择的那个完全取决于你想要实现的用户体验。您应该将四个组件放在哪里取决于您使用的是方法A还是B.
如果表单在一个页面上,并且您将通过action="example.php"
属性将数据提交到另一个页面,则表单的HTML应该(显然)位于第一页上,其他一切应该在第二个(example.php
)页面上(所有的PHP和SQL)。如果出现验证错误,您可以使用header(Location: firstpage.php?error=something)
将用户返回原始页面以修复错误。
如果您在一个页面上执行所有操作(通过放置action="<?php echo $_SERVER["PHP_SELF"]; ?>"
或简单地action=""
,两者都执行相同的操作),则应在用户提交时进行验证在那一页上形成表单,如果没有验证错误,请将数据插入数据库并使用PHP的header()
函数重定向用户。
当您使用方法B时,这是我将如何处理此类表单的更详细的逐步过程。在示例中,firstpage.php
是用户启动的页面,secondpage.php
是用户在所有信息都正确的情况下被带到的页面。
firstpage.php
以下PHP是:PHP:
<?php
if (isset($_POST['submit']) {
// Some validation function
if (do_validation()) {
// Information is valid, insert into db
header(Location: secondpage.php);
die();
}
else {
echo "Error; the information you submitted is not valid.";
}
}
?>
secondpage.php
时,您可以告诉他们表单已成功提交。