2013-01-10 26 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:”)。你的主题还没有涉及。