2011-11-18 69 views
3

我的應用程序是一個簡單的登錄頁面。當它失敗時,我打印一條錯誤消息。我的問題是,爲什麼當我重新加載頁面時,郵件又被打印了?我該如何解決這個問題? 代碼工作正常,我做了另一個php文件執行數據庫檢查&連接。爲什麼POST ['submit']在我重新加載時設置?

<?php 
require_once("include/database.php");  
if(isset($_POST['submit'])) { 
    connect_bookstore(); // custom function 
    $spassword = sha1($_POST['password']); 
    $username = $_POST['username']; 
    if (checkpassword($username,$spassword)) { //custom function 
     header('Location:insert.php'); 
     exit; 
    } else { 
     $message = "Login failed!";   
    } 
} 
?> 

在html正文中。

<?php 
if (isset($message)) { 
    echo $message; 
} 
?> 
+0

[只能使用$ _POST信息一次](http://stackoverflow.com/questions/8171227/using-post-information-only-once) – Gian

+2

你應該給你的哈希值加鹽。 – SLaks

回答

11
<?php 
session_start(); 

require_once("include/database.php");  
if(isset($_POST['submit'])) { 
    connect_bookstore(); // custom function 
    $spassword = sha1($_POST['password']); 
    $username = $_POST['username']; 
    if (checkpassword($username,$spassword)) { //custom function 
     header('Location:insert.php'); 
     exit; 
    } else { 
     $_SESSION['message'] = "Login failed!"; 
     header('location: /yourfile.php'); 
     exit;  
    } 
} 

if(isset($_SESSION['message'])) 
{ 
    echo $_SESSION['message']; 
    unset($_SESSION['message']); 
} 
?> 

基本上,是的,後/重定向/得到...但有時一個簡單的解釋是更好的。

我使用會話來存儲Flash消息,然後像這樣顯示它們。

+0

感謝您的示例。 –

1

那是因爲你重發相同的POST數據時,你刷新,如果你做一個GET請求,你會在你的參數要傳遞是那裏的URL注意到,因此,如果您刷新這些參數再次是發送。與POST一樣的東西。

0

當您重新加載頁面時,瀏覽器將發送與原始頁面相同的請求。

你想要一個POST-Redirect-GET

相關問題