在wordpress中编码时防止双表单提交

时间:2013-01-10 04:39:02

标签: forms wordpress double submission

我目前正在使用wordpress 3.5并创建自己的页面模板。我在该模板中有自己的表单,当我单击提交按钮时,它已成功将数据保存到我的数据库中。不幸的是,当我在浏览器上单击F5或刷新按钮时,它会提示一个警告,如果我继续,将会提交双表格提交。

通常我通过使用“提交后重定向到同一页面”技术来防止这种情况。但是我不能使用标题(“location:”)来重定向,因为它会生成错误:警告:无法修改标题信息 - 已经由发送的标题。可能在其他wordpress文件上有回声阻止重定向。

有谁知道如何解决这个问题?或者有没有人知道其他技术来防止重定向旁边的双重表单提交?

2 个答案:

答案 0 :(得分:1)

我总是使用Javascript完成此操作:

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

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

<?php } ?>

但是现在我考虑一下,你可以轻松地在主题的某个地方创建另一个PHP页面,主题的其余部分不包括它来处理表单数据并重新指向表单。

我也有98%的人确信你可以通过简单地要求“wp-blog-header.php”来包含$ wpdb而不发送标题。

答案 1 :(得分:0)

模板文件中除了输出外没有输出。那会是什么?查看您网站的源代码,它只是您告诉Wordpress创建的内容。

所以这是第一个:您可以在首先调用的模板文件顶部使用标题(“Location:”)。通常是header.php。

其次,您可以(并且通常应该)使用钩子来处理表单。例如:

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

但也许有一个不同的钩子(我不记得任何最佳做法)。这里和那里的教程会给你建议。在这种情况下,您肯定会在有任何输出之前调用header(“Location:”)。你的主题还没有涉及。