我试图在<form>

时间:2015-08-21 02:01:17

标签: php mysql forms validation

我是开发PHP表单的新手,目前正在尝试理解和了解它们的处理方式。如果我理解正确,有两种方法可以使用&#34; Action&#34;属性。

方法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。我希望我的表格能够(在提交时)工作如下:

  1. 如果提交过程中有一个或多个错误,请停留在同一页面上(停止提交过程)并显示相关的错误消息,所有字段仍然填充(而不是空白)。
  2. 如果提交过程中没有错误,请将数据移至MySQL中,然后显示一个空白页面,其中显示&#34;您的数据已成功提交&#34;以及返回我主页的链接。
  3. 目前我正在使用方法B,并已成功实施#1。但我还没有达到#2。所以在这个漫长的故事之后,我的问题是:我应该把这四个组件放在哪里?在一两个文件中,为什么?

3 个答案:

答案 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.

对于方法A

如果表单在一个页面上,并且您将通过action="example.php"属性将数据提交到另一个页面,则表单的HTML应该(显然)位于第一页上,其他一切应该在第二个(example.php)页面上(所有的PHP和SQL)。如果出现验证错误,您可以使用header(Location: firstpage.php?error=something)将用户返回原始页面以修复错误。

对于方法B

如果您在一个页面上执行所有操作(通过放置action="<?php echo $_SERVER["PHP_SELF"]; ?>"或简单地action="",两者都执行相同的操作),则应在用户提交时进行验证在那一页上形成表单,如果没有验证错误,请将数据插入数据库并使用PHP的header()函数重定向用户。

当您使用方法B时,这是我将如何处理此类表单的更详细的逐步过程。在示例中,firstpage.php是用户启动的页面,secondpage.php是用户在所有信息都正确的情况下被带到的页面。

  1. 使用您的表单向用户显示。
  2. 当用户提交表单时,数据将通过POST或GET提交(取决于您是否希望通过URL访问此信息。如果您不确定,请使用POST)firstpage.php以下PHP是:
  3. 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.";
      }
    }
    ?>
    
    1. 当用户结束secondpage.php时,您可以告诉他们表单已成功提交。