避免在页面重新加载时以及表单操作与同一页面时发送数据

时间:2012-11-12 06:43:43

标签: php

我想从我的页面发送一个名为index.php的数据,该操作与同一页面有关,所以我可以在index.php中获取$_POST['submitted'],当我提交数据时成功保存到我的数据库,但当我重新加载页面数据仍然保存到我的数据库。我的问题是,当我重新加载数据时,如何避免发送数据,但操作是使用相同的页面(<?php echo $_SERVER['PHP_SELF'];?>)..?

谢谢..

//page index.php
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
    <input type="hidden" name="submitted" value="1" />
    <input type="text" name="email_address"/>
    <input type="submit" value="submit"/>
</form>

//still in index.php
if(isset($_POST['submitted']) && $_POST['submitted']==1)
{
    //send data
}

3 个答案:

答案 0 :(得分:0)

使用

if(isset($_POST['submit'])){ //send data}

因为你给了隐藏字段值= 1,而且条件总是变为真。

答案 1 :(得分:0)

最可靠的做法是使用两个略微不同的网址。重新加载页面时出现问题的原因是浏览器识别出它与调用的url完全相同,因此执行完全相同的请求(包括post变量)。不同的网址不会发生这种情况。 将查询参数添加到表单目标网址就足够了,这样网址会有所不同,但您仍然可以调用相同的脚本。您可以简单地忽略该伪参数。在处理了post变量(将它们存储在数据库中)之后,您向浏览器发送一个重定向标头,指向没有query参数的普通url。这样浏览器重新加载页面而不发送post变量。您可以使用phps header()函数进行重定向。

答案 2 :(得分:0)

为提交输入添加名称应解决问题,如下所示:

...    
<input type="submit" name="submit" value="submit"/>
if(isset($_POST['submit']) {
... 

另一方面,我认为应该是:

action="<?php $_SERVER[ 'PHP_SELF' ]; ?>"

没有“回声”。

希望这有帮助。