PHP使用重定向发送数组

时间:2012-02-15 01:49:55

标签: php arrays redirect

是否可以发送一个header('Location:);的数组,以便重定向后可以回显数组?我有一个注册表单,如果出错,它会重定向到主页,成功后会重定向到成员页面。如果我可以执行$arr['error_message'] = 'Invalid Password';之类的操作,那么请重定向if (isset($arr['error_message'])) { echo $arr['error_message']; }

这有望实现不需要额外的URL参数(& error = Invalid%20Login)。我注意到$_SESSION是一个选项,但是如果用户打开了多个标签怎么办?还是我坚持使用更多的URL参数?

3 个答案:

答案 0 :(得分:3)

您可以使用$ _GET来执行此操作,例如

 if($success)
 {
     $msg="success";
     header("Location: member.php?msg=$msg");
 }
 else
 {
     $msg="Invalid Password";
     header("Location: home.php?msg=$msg"); 
 }

并在您当前页面中检索

if(isset($_GET['msg']))
{ 
    echo $_GET['msg']; 
}

答案 1 :(得分:3)

我想建议你一些解决方案。

解决方案1 ​​

GET Param(确实你说不想) 我没有看到发送GET Param的任何问题,因为它不包含任何敏感数据。例如,您可以使用一些内部CODE。 例如: 你定义了一些代码。

$code = 1; // This should be dynamic like, 
           // 1 => When Password wrong, 
           // 2 => When login ID not exists, 
           // 3 => when unknown error occurred
header('Location: error.php?err=' . $code);

所以在error.php中你可以检查一下。

$errorCode = $_GET['err'];

switch($errorCode)
{
   case 1;
   {
       echo "Password wrong";
       break;
   }
   case 2;
   {
       echo "login ID not exists";
       break;
   }
   // Add custom messages as you wish
}

解决方案2

使用会话。我认为如果您有多个标签并不重要。在密码检查代码中,您可以在重定向之前启动会话。

$_SESSION['ERROR_MESSAGE'] = "Whatever you want";

然后在你的error.php(重定向页面)中,你可以检查

if(isset($_SESSION['ERROR_MESSAGE']))
{
    echo $_SESSION['ERROR_MESSAGE'];
    unset($_SESSION['ERROR_MESSAGE']);
}

解决方案3

您可以使用POST操作生成隐藏的表单而不是PHP重定向,并且可以在执行时为其分配相关的错误消息

<form name="frmError" id="frmError" method="POST" action="error.php">
<input type="hidden" name="error" value="<?php echo $errorMessage; ?>" />
</form>

并编写一个javascript函数来POST你的表单。

<script type="text/javascript">
function submitform()
{
  document.frmError.submit();
}
</script>

然后将您的身体标签修改为

<body <?php if(isset($errorMessage)) {?> onload="submitform();" <?php } ?> >

希望这有助于您做出决定。

答案 2 :(得分:0)

会话是一种常见的解决方案。虽然用户可以打开多个选项卡,但您希望用户同时注册一个帐户。所以它不会引起问题