2010-09-29 110 views
5

我一直在表單數據清除的地步。用戶提交表單後,數據將添加到數據庫中。它很好,直到這裏。但是,如果用戶刷新之前輸入的頁面,數據將重新輸入到數據庫中。我正在使用post方法發送數據。我沒有使用AJAX。提交數據後,整個頁面將重新加載。請幫我解決一下這個。如果在提交後有任何方式清除表單數據,那麼在刷新頁面之後,沒有數據被添加到數據庫中來回答這個問題。在PHP提交混帳後清除表單數據

+0

也許使用布爾提交前檢查,然後提交當它設置爲true? – Emerion 2010-09-29 13:19:55

回答

1

在我看來,表單的發佈行爲就是表單頁面本身。你必須添加一個檢查表單是否已經提交,這樣你的數據不會再保存在數據庫中。或者您可以將發佈操作更改爲不同的頁面,以便在數據庫中插入並將用戶重定向到初始頁面表單。

0

大多數人使用url將表單發佈到,然後重定向回原始表單。這可以是相同的網址。

8

插入數據後,做了重新定位:

header('Location:'.$_SERVER['PHP_SELF']); 

重定向後,爽口不會造成數據再次插入。


要向用戶顯示消息,我只需通過$_GET設置一個標誌。例如:

// Redirect and set $_GET variable 
header('Location:'.$_SERVER['PHP_SELF'].'?showmsg=true'); 

以顯示隱藏的div你可以做一個函數:

function show_confirmation() 
{ 
    return isset($_GET['showmsg']) && $_GET['showmsg'] == 'true'; 
} 

而且使用這樣的功能:

<div style="display:<?php echo show_confirmation() ? 'block' : 'none'; ?>"> 
    <!-- Message for user --> 
</div> 
+0

謝謝他們的作品。但還有另一個問題。提交表單後,我收到了要顯示的消息。該消息顯示在用戶提交表單之前隱藏的div元素內。你能幫忙嗎? – 2010-09-30 04:16:58

+0

Sanket,我更新了我的答案,並提供了向用戶顯示隱藏的div的建議。 – Mischa 2010-09-30 04:43:25

+0

謝謝隊長。它的工作現在很好。再次感謝你。 – 2010-09-30 04:59:24

0

嘗試使用會話。設置會話變量以記錄用戶是否已經提交表單。

把這個在你的代碼的開頭(這需要在每一頁上):

在session_start();

然後當他們提交表單,設置會話變量:

$ _SESSION [ 'form_submitted'] = TRUE;

下面是一個教程鏈接上的會話:Tutorial

1

如果使用POST代替GET作爲動作屬性表單上,然後刷新結果頁面將不會重新提交表單(某些瀏覽器可以提供這樣做的選擇,但他們肯定不應該默認這樣做)。

但是,您不能排除表單被多次發佈的可能性 - 發生這種情況的幾種常見原因;例如,如果頁面加載緩慢,則用戶可以在按鈕上多次點擊。

做的最好的事情是有形式的隱藏唯一ID字段,所以當你接收已多次提交表單,你可以告訴你的程序可以忽略它。

0

生成表單html時生成一個唯一的鍵,並在表單中爲該鍵設置一個隱藏字段。將密鑰與數據一起保存,並且如果密鑰已存在於數據庫中,則不保存數據。

0

如果您選擇重定向方法,請不要忘記在重定向之後添加一個die以指示webserver停止腳本執行。

if(saveFormInformation()) 
{ 
    header('Location: http://www.example.com/'); //this line instructs browser 
               //to go to example. com 
               //but the webserver will keep executing the rest of the script 
               //unless you instruct it to stop 

    die; //this line instructs web server to stop execution of the script 
}