2011-06-02 131 views
1
<body> 

<?php 

if(isset($_POST['vendor_add_submit'])){ 

//INSERT INTO DB 

unset( $_POST['vendor_add_submit']); 
} 

?> 


<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" > 


<label>Email</label> 
<input type="text" name="vendor_email" value="" /> 


<input type="submit" name="vendor_add_submit" value="SAVE" /> 


</form> 
</body> 

unset( $_POST['vendor_add_submit']);用於防止頁面刷新時多次插入數據庫。我使用print_r($_POST['vendor_add_submit'])在未設置前後進行了測試,發現unset()函數不起作用。未設置表單提交按鈕

我該如何達到unset函數的目的呢?

+0

@evolve 2,好,我會好好照顧 – 2011-06-02 17:25:50

+0

是這是什麼意思,採摘綠色對號旁邊爲你的問題的正確答案..看到你的個人檔案列表的問題,大多數人都沒有接受答案。 – Fosco 2011-06-02 22:17:51

回答

3

未設置不會停止刷新已發佈的數據到腳本的刷新。未設置的函數消除了該腳本的剩餘執行,但刷新是新的執行。

您可以簡單地將瀏覽器重新定向到插入頁面之後進入入口頁面,這樣以後的刷新將是安全的。

//INSERT INTO DB 
//... 
header('Location: samepage.php'); 
exit(); 

我確信還有其他方法可以完成此操作。

+0

請在Johann du Toit看到我的評論 – 2011-06-02 17:21:16

+0

@sof_user我不得不說,請看我的答案的第一部分。 unset()'ing $ _POST與刷新完全沒有關係。刷新會導致瀏覽器調用頁面並重新生成新的填充的$ _POST。請按照我的建議添加重定向。 – Fosco 2011-06-02 17:45:07

+0

我認爲,javascript window.location =「somepage」比header('location:somepage.php') – 2011-07-01 07:19:43

3

您的方法無法工作,您只需編輯PHP腳本收到的數據即可。如果用戶刷新瀏覽器,那麼它將再次提交相同的數據,PHP將使用瀏覽器發送的數據填充全新的$_POST

如果要停止刷新重新提交數據,請使用POST-REDIRECT-GET pattern

0

只有在服務器端才能刪除$ _POST值這意味着在該請求上PHP將無法看到或使用它(您將其刪除)。

但是,您正在頁面的HTML上呈現提交按鈕,因此每次有人訪問該頁面並提交表單時,他們都會再次提交該值。並且您將根據當前請求再次將其移除。所以每個請求都會將數據插入到數據庫中。

您可能希望看看而不是檢查記錄是否已經存在(或者如果用戶已經有一個,不知道您想要什麼),然後使用header('Location: otherpage.php');將它們從頁面重定向。

希望幫助...

+0

舒服得多,所以每次有人訪問頁面並提交表單時,他們都會再次提交值。「 - 如果有人點擊提交按鈕並提交數據,這是沒有問題的。我只想阻止用戶在第一次插入數據後刷新頁面時向數據庫中插入相同的數據。如果未設置$ _POST ['vendor_add_submit']刪除其內容,則在頁面刷新(而不是再次單擊提交按鈕)時,如何將相同的數據插入到數據庫中? – 2011-06-02 17:19:25