2014-02-24 73 views
1

您好,我一直在嘗試取消設置帖子,基本上我遇到的問題是數據會被INSERTED到數據庫中。 php函數發出消息指出帖子成功。這一切都很好,但是當我刷新我的頁面時,這個帖子不斷將數據插入到我的數據庫中。基本上我怎麼能阻止它發佈。這裏是代碼:取消設置帖子PHP ...不想取消設置

  if(isset($_POST['submit_message'])) { 
    $sql = "INSERT INTO messages (user_id, timestamp, times, message) 
    VALUES ('".$_SESSION['user_id']."', '".date("Y.m.d")."', '".date("H:i:s")."', '".$_POST['message-content']."')"; 

    $result = mysql_query($sql); 
    unset($_POST['submit_message']); 
    unset($GLOBALS['_POST']['submit_message']); 
    if(!$result) { 
     $msg = 'There was an error while trying add your message.'; 
     unset($_POST['submit_message']);    
    } else { 
     $msg = 'Your message was successfully added.';  
     unset($_POST['submit_message']);   
    } 
      } 

正如你從代碼中看到的,我嘗試用PHP輸入一些未設置的帖子,但似乎沒有工作。我如何取消我的帖子?

+0

它的工作原理是,當我刷新頁面時,INSERT保持INSERTING狀態。基本上我想解除它,所以它不會再發生。 – user3342705

+0

爲什麼妳需要取消它呢?將該值複製到單獨的數組並修改該數組 –

回答

0

無論何時刷新頁面,都會重新提交表單數據。結果$_POST剛剛填入表單數據。請記住,HTTP是無狀態的。一旦頁面執行並且請求終止,來自該請求的POST數據消失。

如果您不想刷新頁面以重新提交表單,則需要使用POST/REDIRECT/GET模式。

爲了能夠正常工作,我們需要使用303重定向。這意味着我們需要發送一個303頭與我們的重定向。 303重定向會導致瀏覽器重新加載頁面,而不會重新提交初始HTTP POST請求。這包括用戶使用後退或刷新按鈕的時間。

+0

是的,我怎樣才能終止POST? – user3342705

+0

@JohnConde它可能有助於您引用「POST/REDIRECT/GET」模式解釋中解決方案中第3項的文本,因爲該部分解釋了303重定向如何防止重新提交表單瀏覽器導航到歷史堆棧中的頁面。 –

+0

@DavidAntaramian好主意。完成。 –