在 wordpress 中编码时防止双重表单提交
Posted
技术标签:
【中文标题】在 wordpress 中编码时防止双重表单提交【英文标题】:Prevent double form submission when coding in wordpress 【发布时间】:2013-01-10 04:39:01 【问题描述】:我目前正在使用 wordpress 3.5 并创建自己的页面模板。我在该模板中有自己的表单,当我单击提交按钮时,它已成功将数据保存到我的数据库中。不幸的是,当我点击浏览器上的 F5 或刷新按钮时,它会提示一个警告,提示如果我继续,将会有双重表单提交。
通常我通过使用“提交后重定向到同一页面”技术来防止这种情况。但我不能使用 header("location: ") 重定向,因为它会生成错误:警告:无法修改标头信息 - 标头已由发送。可能在其他 wordpress 文件上有回显,阻止重定向。
有谁知道如何解决这个问题?或者有人知道除重定向之外的其他技术来防止双重表单提交吗?
【问题讨论】:
【参考方案1】:我总是用 javascript 来做这个:
<?php if(isset($_POST['submit_flag'])) ?>
<script type='text/javascript'>
window.location='URL';
</script>
<?php ?>
但现在我想了想,您可以轻松地在您的主题中的某个位置创建另一个 PHP 页面,该页面不包含在您的主题的其余部分中,以处理表单数据并重定向回您的表单。
我也有大约 98% 的把握,您可以通过简单地要求“wp-blog-header.php”来包含 $wpdb 而无需发送标头。
【讨论】:
这是个好主意。我创建了一个 PHP 页面并将表单操作添加到该页面。然后新页面只是使用元重定向将其重定向回我的页面。非常感谢【参考方案2】:除了在您的模板文件中没有输出。那会是什么?查看您网站的源代码,它只是您告诉 Wordpress 创建的内容。
首先:您可以在首先调用的模板文件的顶部使用 header("Location: ")。通常是 header.php。
其次,您可以(通常应该)使用钩子来处理表单。例如:
add_action( 'init', function()
// Handle stuff
);
但也许有不同的钩子(我不记得有任何最佳实践)。这里和那里的教程会给你建议。在这种情况下,您肯定会在有任何输出之前调用 header("Location: " )。你的主题还没有涉及到。
【讨论】:
以上是关于在 wordpress 中编码时防止双重表单提交的主要内容,如果未能解决你的问题,请参考以下文章