2010-04-12 84 views
2

当密码输入错误时,许多具有登录名的网站如何将用户名字段保留在用户名字段中。 表单的动作(它在index.php上)是另一个php文件,如果密码不正确,则使用Header()返回索引并使用GET将错误传递给它。我可以使用GET将用户名传递回表单,但这看起来很乱,而且我注意到像SMF论坛这样的网站有用户名留在用户名字段中,没有乱七八糟的URL。当密码输入错误时,请在用户名字段中输入用户名字段

+0

为什么php不允许你以这种方式使用$ _POST:$ _POST ['username'] =“Joe Blogs”;?这似乎很明显,并会让事情变得更容易。 – 2010-04-12 09:58:06

+0

你能给出一个SMF论坛的代码/ URL的例子吗?我发现他们发布到可以随时访问表单值的同一个index.php页面。 – zaf 2010-04-12 13:22:46

回答

1

您可以使用会话。

例如,当一个帖子是不正确的(这会去的文件处理您的职位要求):

$_SESSION['username'] = $_POST['username'];

那么你的登录页面上:

<input type="text" name="username" value="<?php echo @$_SESSION['username']; ?>" />

制作确定你开始会话虽然:http://php.net/session_start

+0

作为一般规则,我不建议使用会话来达到这种目的:当用户打开多个选项卡时,最终会导致网站中断。 – 2010-04-12 10:08:01

+0

会话通过选项卡/窗口进行传输。我同意,如果表单发布给自己,处理表单更容易,但情况并非总是如此。如果验证失败,您将如何在不同页面上传输用户数据? (当然,在数据被显示之后,你必须小心地清空请求之间的会话数据等) – 2010-04-12 10:58:08

+0

我想不出当前上下文中有什么问题。我警告不要使用会话作为表单的一般替代(在预订网站等某些领域非常流行的技术)的策略。 – 2010-04-12 12:25:15

3

我通常会发现,在显示表单的同一脚本中处理表单数据比较容易,只有当我收集到正确的输入时才能将表单重定向到其他地方。

0

通过GET方法

header("Location: loginpage.php?username=".$_REQUEST['username']); 

和表单页面u能访问它想:

<input type="text" name="username" value=<?php echo $_GET['username']?> 
+0

非常糟糕,因为您可能会接受XSS和SQL注入攻击。 – 2010-04-12 09:56:30

+0

引用问题:“我可以使用GET将用户名传回表单,但这看起来很乱” – 2010-04-12 09:59:13

+0

您将如何开放SQl注入,没有任何提交到数据库? – 2010-04-12 10:00:07

2

Simples!

<form action="loginpage.php" method="post"> 
    <fieldset> 
    ... 
    <input type="text" name="username" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /> 
    ... 
    </fieldset> 
</form> 

其余的形式ommitted强调解决方案。

+0

但我如何从login.php获取用户名到POST变量中? – 2010-04-12 10:01:04

+0

@Jonathan这就是为什么我们把表单放在login.php – 2010-04-12 10:40:38

相关问题