2012-02-15 51 views
0

是否可以發送帶有header('Location:);的數組,以便在重定向後可以回顯數組?我有一個註冊表單,錯誤時它會重定向到主頁,並在成功時重定向到成員頁面。如果我可以做類似$arr['error_message'] = 'Invalid Password';那麼在重定向if (isset($arr['error_message'])) { echo $arr['error_message']; }帶發送重定向的PHP發送數組

這是希望實現不需要額外的URL參數(&錯誤=無效的%20Login)。我注意到$_SESSION是一個選項,但如果用戶打開了多個選項卡,該怎麼辦?或者我堅持使用更多的URL參數?

回答

3

您可以使用$ _GET要做到這一點,像

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

而且在你retrive當前頁面像

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

會話是一種常見的解決方案。雖然用戶可以打開多個選項卡,但您希望用戶在同一時間註冊一個帳戶。因此,它不會導致問題

3

我想建議你幾個解決方案。

解決方案1 ​​

GET參數(事實上你說不想) 我看不出有任何問題與發送GET帕拉姆,因爲它不包含任何敏感數據。作爲一個例子,你可以使用一些內部的代碼。 例如: 您定義了一些代碼。

$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

而不是PHP重定向,您可以生成隱藏的形式POST操作並且您可以分配相關的錯誤消息到執行時

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

然後編寫一個javascript函數來發布你的表單。

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

然後修改你的身體標記爲波紋管

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

希望這將幫助你決定。