2010-05-14 125 views
2

我送登录状态=失败,回到我的登录page.Here是我的代码 -传值到另一个PHP

header("location:index.php?login=fail"); 

但通过URL喜欢 -

http://localhost/303/index.php?login=fail 
发送

有什么方法可以在不显示URL的情况下传递值?以及如何在第二页上获得这个值?

+0

不知道你是否会依赖于可变知道,如果用户成功loged或没有,但请记住,你永远不应该依赖无论是$ _GET还是$ _POST变量,因为它们都可以被用户操纵。使用$ _SESSION来存储那种信息 – 2010-05-14 13:06:39

+0

@Gonçalo什么样的信息?简单的错误信息?你在开玩笑 – 2010-05-14 13:15:46

+1

@Shrapnel不,不是简单的错误信息。您用来了解登录是否成功的信息。我不知道Piyush是否想隐藏登录变量,所以用户不能将登录名更改为true,并绕过一些“if”...我只是建议他,让一个var POST赢得' t使用户难以改变它 – 2010-05-14 21:49:47

回答

1

您通过GET请求,这就是为什么它会出现在URL传递该值。为了传递一个值而不在URL中显示它,你想通过一个POST请求来传递它。

为了做到这一点,您不希望将该值“返回”到您的登录页面。相反,无论php表单在点击“登录”按钮后处理登录用户的过程,都将决定显示用户的内容。

<form method="post" action="checkLogin.php"> 
Username: 
<input type="text" name="username" maxlength="25" /> 
Password: 
</td><td><input type="password" name="password" /> 
<input type="submit" name="submit" value="Login"> 
</form> 

为了:

$_POST['username']; 

将获得与您通过POST传递的名称为“用户名”的价值 -

在PHP后的变量可以通过全局$ _ POST对象来访问动态保存并向用户显示错误,可以将它们存储在会话中,例如有一个名为“errors.php”的文件。

<?php 
if (isset($_SESSION['errors'])) 
{ 
    echo $_SESSION['errors']; 
} 

unset($_SESSION['errors']) 
?> 

而在你的PHP检查登录,这样做:

session_start(); 
$_SESSION['errors'] = "Invalid username or password."; 

然后重定向到登录页面(不传递任何变量)和你的表格上总是有这一领域:

<?php include("errors.php"); ?> 

如果您没有任何错误,则不会显示任何内容,并且登录页面看起来很正常。

注意:在任何使用session_start()的php表单中,它都是第一件事。

+2

他要求重定向 – 2010-05-14 12:47:59

+0

但是在标题( - )中我怎样才能指定method =“Post”? – nectar 2010-05-14 12:54:32

+0

你不会在标题中指定任何东西 - 如果你将它们重定向回登录页面或“索引”或其他东西 - 在该页面上有<?php include(“errors.php”)?>。然后,无论您存储在会话中的任何错误都会显示在那里。会话中的值存储在服务器上,您不需要传递它们。 – 2010-05-14 12:55:59

0

其他方法是使用会话隐藏字段但你你在做什么是很好的目的。您可以在以后检索这样的值:

if ($_GET['login'] === 'fail') 
{ 
    // failed....... 
} 
0

有几种方法来完成你的任务

  • 现代AJAX方式。表单使用AJAX发送。没有页面重新加载,直到密码正确。显示错误。需要JavaScript。
  • Post/Redirect/Get模式。表格使用普通POST发送。没有错误重定向,显示在适当位置。
  • 会话,当我们存储的错误在会话
相关问题