2010-09-29 114 views
5

我一直在表单数据清除的地步。用户提交表单后,数据将添加到数据库中。它很好,直到这里。但是,如果用户刷新之前输入的页面,数据将重新输入到数据库中。我正在使用post方法发送数据。我没有使用AJAX。提交数据后,整个页面将重新加载。请帮我解决一下这个。如果在提交后有任何方式清除表单数据,那么在刷新页面之后,没有数据被添加到数据库中来回答这个问题。在PHP提交混帐后清除表单数据

+0

也许使用布尔提交前检查,然后提交当它设置为true? – Emerion 2010-09-29 13:19:55

回答

1

在我看来,表单的发布行为就是表单页面本身。你必须添加一个检查表单是否已经提交,这样你的数据不会再保存在数据库中。或者您可以将发布操作更改为不同的页面,以便在数据库中插入并将用户重定向到初始页面表单。

0

大多数人使用url将表单发布到,然后重定向回原始表单。这可以是相同的网址。

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> 
+0

谢谢他们的作品。但还有另一个问题。提交表单后,我收到了要显示的消息。该消息显示在用户提交表单之前隐藏的div元素内。你能帮忙吗? – 2010-09-30 04:16:58

+0

Sanket,我更新了我的答案,并提供了向用户显示隐藏的div的建议。 – Mischa 2010-09-30 04:43:25

+0

谢谢队长。它的工作现在很好。再次感谢你。 – 2010-09-30 04:59:24

0

尝试使用会话。设置会话变量以记录用户是否已经提交表单。

把这个在你的代码的开头(这需要在每一页上):

在session_start();

然后当他们提交表单,设置会话变量:

$ _SESSION [ 'form_submitted'] = TRUE;

下面是一个教程链接上的会话:Tutorial

1

如果使用POST代替GET作为动作属性表单上,然后刷新结果页面将不会重新提交表单(某些浏览器可以提供这样做的选择,但他们肯定不应该默认这样做)。

但是,您不能排除表单被多次发布的可能性 - 发生这种情况的几种常见原因;例如,如果页面加载缓慢,则用户可以在按钮上多次点击。

做的最好的事情是有形式的隐藏唯一ID字段,所以当你接收已多次提交表单,你可以告诉你的程序可以忽略它。

0

生成表单html时生成一个唯一的键,并在表单中为该键设置一个隐藏字段。将密钥与数据一起保存,并且如果密钥已存在于数据库中,则不保存数据。

0

如果您选择重定向方法,请不要忘记在重定向之后添加一个die以指示webserver停止脚本执行。

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 
}