-1

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

4

4 回答 4

4

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

如果做不到这一点,history.back()用于将用户送回应将表单信息保留在那里。

如果做不到这一点,请将他们的表单数据保存在一个$_SESSION变量中并使用它来重新填充表单。

于 2013-08-14T22:57:59.667 回答
1

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

-Init a php session by <?php session_start(); ?>,这个函数必须出现在标签之前

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

-通过以下方式将其取回(在另一页中):$myVarFromSession = $_SESSION['myVar'];

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

于 2013-08-14T23:33:42.473 回答
0

快——脏

  1. 在查询字符串中发回用户名/密码 (?username=...&password=...)
  2. 在重定向之前设置 SESSION 变量

更好——将逻辑封装到类中

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

看看不同的框架如何处理这个问题。一些不错的有 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,
));
于 2013-08-15T00:14:39.150 回答
0

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

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

于 2013-08-16T07:19:27.580 回答