2013-01-10 139 views
1

我目前使用wordpress 3.5並創建自己的頁面模板。我在該模板中擁有自己的表單,當點擊提交按鈕時,它已成功將數據保存到我的數據庫中。不幸的是,當我點擊我的瀏覽器上的F5或刷新按鈕時,它會提示一條提示,說如果我繼續,將會有一個雙重表單提交。防止在wordpress中編碼時提交雙表單

通常我通過使用「重定向到提交後的同一頁面」技術來防止這種情況。但我無法使用標題(「location:」)重定向,因爲它會生成錯誤:警告:無法修改標題信息 - 標題已由發送。其他wordpress文件中可能會出現回聲以防止重定向。

有誰知道如何解決這個問題?還是有人知道其他技術來防止重定向旁邊的表單提交?

回答

1

我一直用javascript做到了這一點:在某處你的主題

<?php if(isset($_POST['submit_flag'])){ ?> 

<script type='text/javascript'> 
    window.location='URL'; 
</script> 

<?php } ?> 

但現在,我想的話,你可以很容易地創建另一個PHP頁面,不是由你的主題來處理的其餘部分包括表單數據並重新指向您的表單。

我也確信你可以通過簡單地要求「wp-blog-header.php」來包含$ wpdb而不發送頭文件。

+0

這是一個好主意。我創建了一個PHP頁面並將表單動作添加到該頁面。然後,新頁面只需使用元重定向將表單重定向到我的頁面。非常感謝你 –

+0

不客氣。很高興我仍然可以有很好的想法。 –

0

除了在你的模板文件中沒有輸出。那會是什麼?看看你的網站的源代碼,這只是你告訴Wordpress創建的。

所以這是第一次:您可以在首先調用的模板文件頂部使用header(「Location:」)。通常是header.php。其次,你可以(通常應該)使用鉤子來處理表單。例如:

add_action('init', function() { 
    // Handle stuff 
}); 

但也許有不同的鉤子(我不記得任何最佳實踐)。教程在這裏和那裏會給你建議。在這種情況下,在有任何輸出之前,你一定會調用header(「Location:」)。你的主題還沒有涉及。