我在表单数据清除方面一直处于困境。用户提交表单后,数据将添加到数据库中。它很好,直到这里。但是,如果用户刷新先前输入的页面,则将数据重新输入数据库。我正在使用post方法发送数据。我没有使用AJAX。提交数据后,整个页面将重新加载。请帮我解决一下这个。如果提交后有任何方法可以清除表单数据,那么刷新页面后没有数据添加到数据库中,请回复此问题。
答案 0 :(得分:8)
插入数据后,请执行重定向:
header('Location:'.$_SERVER['PHP_SELF']);
重定向后,刷新不会导致数据再次插入。
要向用户显示消息,我只需通过$_GET
设置一个标记即可。例如:
// Redirect and set $_GET variable
header('Location:'.$_SERVER['PHP_SELF'].'?showmsg=true');
要显示隐藏的div,您可以创建一个函数:
function show_confirmation()
{
return isset($_GET['showmsg']) && $_GET['showmsg'] == 'true';
}
并使用这样的功能:
<div style="display:<?php echo show_confirmation() ? 'block' : 'none'; ?>">
<!-- Message for user -->
</div>
答案 1 :(得分:1)
在我看来,您的表单的后期操作是表单页面本身。您必须添加检查表单是否已提交,以便您不再将数据保存在数据库中。或者,您可以将发布操作更改为在数据库中插入的其他页面,并将用户重定向到初始页面表单。
答案 2 :(得分:1)
如果您使用POST
而不是GET
作为表单上的操作属性,则刷新结果页面将不会重新提交表单(某些浏览器可能会提供此选项,但是当然不应该默认这样做。)
但是,您不能排除表单被多次发布的可能性 - 有几个常见原因导致它发生;例如,如果页面加载缓慢,用户可能会在按钮上多次单击。
最好的办法是在表单上添加一个隐藏的唯一ID字段,这样您就可以知道何时收到多次提交的表单,并且您的程序可以忽略它。
答案 3 :(得分:0)
大多数人使用网址将表单发布到,然后重定向回原始表单。这可以是相同的网址。
答案 4 :(得分:0)
尝试使用会话。设置会话变量以记录用户是否已提交表单。
将它放在代码的开头(这需要在每个页面上):
在session_start();
然后当他们提交表单时,设置一个会话变量:
$ _ SESSION ['form_submitted'] = true;
以下是会话教程的链接:Tutorial
答案 5 :(得分:0)
生成表单html时生成唯一键,并在表单中将隐藏字段设置为此键。将密钥与数据一起保存,如果密钥已存在于数据库中,则不保存数据。
答案 6 :(得分:0)
如果选择重定向方法,请不要忘记在重定向后添加骰子以指示Web服务器停止脚本执行。
if(saveFormInformation())
{
header('Location: http://www.example.com/'); //this line instructs browser
//to go to example. com
//but the webserver will keep executing the rest of the script
//unless you instruct it to stop
die; //this line instructs web server to stop execution of the script
}
答案 7 :(得分:0)
将数据库插入数据库后,调用unset()方法清除数据。
<强>未设置($ _ POST); 强>
在这里查看我的答案:http://redux.js.org/docs/FAQ.html#performance-all-reducers