2013-07-24 83 views
0

好的,所以我有一個重定向函數爲我的登錄。下面有一些代碼:保留在提交的表格

if ($sukces) { 
    $_SESSION['id'] = $row['id']; 

    if($_POST['location'] != '') { 
     header('Refresh: 1;url='.$_POST['location'].''); 
    echo message('You have logged in.<br>Press <a href="'.$_POST['location'].'">here</a> if you are not returned automatically.'); 
    return false; 
    } else { 
     header("Location: /home"); 
    } 

} else { 
    // login failed 
    exit(); 
} 

if($_POST['location'] != '') { 
    header('Refresh: 1;url='.$_POST['location'].''); 
} else { 
    header("Location: /account"); 
} 


<form action="?page=login" method="post"> 
<input type="hidden" name="location" value="<?=isset($_REQUEST['redirect']) ? htmlspecialchars($_REQUEST['redirect']) : ''?>"> 


E.g: 
http://localhost/?page=login&redirect=%2Fforum%2F%3Faction%3Dpost%26boardid%3D1 

的問題是,如果你輸入了錯誤的登錄憑據位置輸入字段的值將成爲空。但是,如果你輸入錯誤,然後輸入正確的,你不會被重定向。這是爲什麼?我如何保持重定向網址?

+0

你沒有做任何事情,除了退出();在其他情況下(登錄字段)。我認爲你需要在那裏做出改變。 – Maximus2012

+0

嘗試將'exit()'改爲'echo「登錄失敗」 – pattyd

回答

0

我這樣做,而不是:

<form action="?page=login<?=isset($_GET['redirect']) ? '&redirect='.urlencode($_GET['redirect']) : ''?>" method="post"> 
0

第二次到達此頁面時,它基本上是一個完整的重新加載,PHP再次執行整個表單處理。但是這一次,請求在創建表單時沒有「重定向」參數。但是,有一個'位置'參數,來自您的隱藏表單輸入。我說你有兩個不錯的選擇:

  • 變化是「位置」或「重定向」,所以你總是使用相同的參數名稱
  • 有PHP代碼接近底部決定爲使用「位置',或者如果不可用,則'重定向'。
0

你注入「重定向」回你的形式隱藏字段。這是一個好的開始。但是你把它的名字改成'位置'。將隱藏字段的名稱設置爲「重定向」,並將正確重新提交。我相信這是你的初衷。