我正在开发用于用户注册的基本HTML / PHP表单。它工作正常,但有一个我想解决的问题。我注意到在测试期间,当我按提交并且密码不匹配时,我会进入错误页面(按设计),然后重定向回注册,我必须输入所有内容一遍又一遍。有没有办法保持用户输入的字段填充,以便他们可以返回并纠正需要修复的内容而不必重新输入所有内容?
答案 0 :(得分:4)
最好的方法是使用AJAX,这样他们就不必首先离开页面了。
如果不这样做,使用history.back()
发回用户应该保留表单信息。
如果失败,请将表单数据保存在$_SESSION
变量中,并使用该表格重新填充表单。
答案 1 :(得分:1)
您可以在会话中保存提交的数据:
- 按<?php session_start(); ?>
进行php会话,此功能必须出现 BEFORE 标签
- 在会话中存储变量,如下所示:$_SESSION['myVar']=$myVar;
- 通过:$myVarFromSession = $_SESSION['myVar'];
- 最后,销毁会话及其内容:<?php session_destroy(); ?>
答案 2 :(得分:0)
我强烈建议在处理请求,表单,验证,错误消息和呈现/路由逻辑的类中封装各种移动部件。您会发现这比尝试在脚本之间来回手动抛出错误消息/数据更容易。如果您的网站/应用程序很大,或者您希望遵循最佳实践并成为更好的开发人员,那么课程就是您的选择。
看看不同的框架如何处理这个问题。一些好的是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建议使用框架非常好。该框架的目的是为您免除您现在遇到的麻烦。
如果您坚持重定向到错误页面,那么您可以在会话中存储用户名,但我强烈建议不要存储前面提到的密码。