PHP通过重定向发送数组


PHP send array with a redirect

是否可以发送带有header('Location:);的数组,以便在重定向后回显该数组?我有一个注册表格,一旦出错,它会重定向到主页,一旦成功,它就会重定向到会员页面。如果我能做一些类似$arr['error_message'] = 'Invalid Password';的事情,那么在重定向if (isset($arr['error_message'])) { echo $arr['error_message']; }

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

您可以使用$_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

获取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 } ?> >

希望这能帮助你做出决定。

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