在PHP中提交后清除表单数据

时间:2010-09-29 13:16:43

标签: php

我在表单数据清除方面一直处于困境。用户提交表单后,数据将添加到数据库中。它很好,直到这里。但是,如果用户刷新先前输入的页面,则将数据重新输入数据库。我正在使用post方法发送数据。我没有使用AJAX。提交数据后,整个页面将重新加载。请帮我解决一下这个。如果提交后有任何方法可以清除表单数据,那么刷新页面后没有数据添加到数据库中,请回复此问题。

8 个答案:

答案 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