2012-05-31 45 views
0

acitvity.php取消設置POST值在PHP

//Form start 

    <form action=''> 

    </form> 

//Form End 

//Get POST Values 

<?php 

$_POST['']; 

?> 

//End 

如果我刷新頁面表單提交後,所有公佈值重新提交,原因是因爲所有的值都在瀏覽器,以便它們被重新提交。當我正在尋找這個解決方案時,我得到的信息,如果形式&後操作完成在單獨的PHP文件,然後沒有更多的問題發佈刷新值。

這是解決方案嗎?但現在我必須在單個文件中做這兩個& POST值不應再次刷新提交..有沒有辦法做到這一點?

回答

5

瞭解PRG模式,這樣就可以做到這一點正確:)

http://en.wikipedia.org/wiki/Post/Redirect/Get

例如,您正在嘗試處理用戶註冊表單,所以您要做的是獲得一堆POST ed值,並將其保存到數據庫中。

if(!empty($_POST)) { 
    // validate and save to db 

    // get last inserted user_id 
} 

之後你這樣做,而不是與以前POST ED值返回相同的頁面,您重定向新用戶,例如他的個人資料頁面(假設你有沒有適當的激活要求)

if(!empty($_POST)) { 
    // validate and save to db 

    // get last inserted user_id, say in $user_id 

    header("Location: /users/$user_id"); 
} 

這樣,瀏覽器重定向,每當用戶刷新刷新時,你就不會有說,雙註冊的問題。

+0

我已經看到這個鏈接無處不在。你知道這個示例代碼嗎? – Parthi04

+1

如果您在答案中發佈的鏈接不止一個,可能會更有用。你是一個14k代表用戶,你知道一個好的答案應該是什麼樣子。 –

+0

@Truth是啊..:現在編輯 –

-1

您可以使用unset($var)取消設置變量。不過,我認爲問題出在瀏覽器上。他們中的一些人嘗試變得聰明,無論何時刷新頁面,都會記住表單數據。如果您在URL欄上點擊「去」或「輸入」,它會進行「真實」刷新。

+1

這不是解決方案。不要依靠客戶端進行「真實」刷新。 –

+0

@Truth我在哪裏說客戶應該做一個「真正的」刷新?我只是解釋他可以做什麼。至少在我的職位上,沒有任何細節;他本可以調試我們所知道的。 – Raekye

3

保存到數據庫後,請重新加載頁面:

if ($_POST) { 
    // Save $_POST to database and other stuffs 

    // Reload current page to discard $_POST 
    header('Location: my_page.php'); 
} 

這就是所謂的PRG或Post/Reload/Get

+0

好的一個。它的工作..謝謝... – Parthi04

+0

@Parthia考慮接受這個答案,如果它爲你工作。點擊答案投票計數下面的大綠色空白勾號標記。 –

+0

@Truth感謝您的信息,兄弟。 – flowfree