HTML表单以及它们如何保持用户输入

时间:2013-08-14 22:56:21

标签: php html

我正在开发用于用户注册的基本HTML / PHP表单。它工作正常,但有一个我想解决的问题。我注意到在测试期间,当我按提交并且密码不匹配时,我会进入错误页面(按设计),然后重定向回注册,我必须输入所有内容一遍又一遍。有没有办法保持用户输入的字段填充,以便他们可以返回并纠正需要修复的内容而不必重新输入所有内容?

4 个答案:

答案 0 :(得分:4)

最好的方法是使用AJAX,这样他们就不必首先离开页面了。

如果不这样做,使用history.back()发回用户应该保留表单信息。

如果失败,请将表单数据保存在$_SESSION变量中,并使用该表格重新填充表单。

答案 1 :(得分:1)

您可以在会话中保存提交的数据:

- 按<?php session_start(); ?>进行php会话,此功能必须出现 BEFORE 标签

- 在会话中存储变量,如下所示:$_SESSION['myVar']=$myVar;

- 通过:$myVarFromSession = $_SESSION['myVar'];

返回(在另一页中)

- 最后,销毁会话及其内容:<?php session_destroy(); ?>

答案 2 :(得分:0)

快 - 脏

  1. 在查询字符串中发送用户名/密码(?username = ...&amp; password = ...)
  2. 在重定向之前设置SESSION变量
  3. 更好 - 将逻辑封装到类中

    我强烈建议在处理请求,表单,验证,错误消息和呈现/路由逻辑的类中封装各种移动部件。您会发现这比尝试在脚本之间来回手动抛出错误消息/数据更容易。如果您的网站/应用程序很大,或者您希望遵循最佳实践并成为更好的开发人员,那么课程就是您的选择。

    看看不同的框架如何处理这个问题。一些好的是Yii,Laravel和Symfony2。开箱即用,他们能够快速轻松地解决这个问题。

    示例代码

    class LoginForm
    {
        public $password;
        public $username;
        public function validate()
        {
            // Perform validation
        }
    }
    
    class HttpRequest
    {
        public function getIsPostRequest()
        {
            return 'POST' === $_SERVER['REQUEST_METHOD'];
        }
        public function getPost($name, $default=null)
        {
            return isset($_POST[$name]) ? $_POST[$name] : $default;
        }
    }
    
    // This code processes the request to your login page.
    // View::renderFile() renders a "view", which is a mix
    // of HTML/PHP code that gets served back to the browser.
    $request = new HttpRequest();
    $form = new LoginForm();
    if ($request->getIsPostRequest()) {
        $form->username = $request->getPost('username');
        $form->password = $request->getPost('password');
        if ($form->validate()) {
            // Login the user...
        }
    }
    View::renderFile('login.php', array(
        'form' =>$form,
    ));
    

答案 3 :(得分:0)

在会话中存储用户密码或将其传递给查询参数是一种安全禁忌。您应该在同一表单页面上显示错误,以避免重定向和丢失该数据。这样,错误仍然显示,脚本仍然具有来自$ _POST的用户输入数据。当然,Dan Schmidt建议使用框架非常好。该框架的目的是为您免除您现在遇到的麻烦。

如果您坚持重定向到错误页面,那么您可以在会话中存储用户名,但我强烈建议不要存储前面提到的密码。