如何使表单仅在按钮点击时提交而不是刷新?

时间:2014-01-19 10:06:49

标签: php forms

我有一个表单,我应该只在表单字段被更改时才提交表单(请求服务),如果在用户刷新页面时没有更改字段,则不应再次提交表单。

目标是尽可能减少表单提交的数量,因此如果用户输入相同数据并刷新,我们不应该浪费先前返回的数据并尝试提供新请求并显示相同的数据。 / p>

相反,只有在TEXT(searchdirectory)发生变化时才应该提交。因此不会重复请求相同的数据。

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">            
        <label>TEXT :</label>
        <input type="text" id="search_dir" name="searchdirectory"
            value="<?php
                    if (isset($_POST['searchdirectory']))
                    {
                        echo($_POST['searchdirectory']); 
                    }
                   ?>"
        />            
        <input type="submit" value="Search" name="submit" id="searchB"/>
        <?php            
            if (isset($_POST['submit'])) 
            {
             //functions  to show results queried from searchdirectory
            }
        ?>
    </form>

我想这将是处理浏览器的刷新行为,如果用户刷新页面,有没有办法停止表单提交。它应该显示相同的数据。

3 个答案:

答案 0 :(得分:0)

首先发送表单数据时使用重定向。

<?php            
    if (isset($_POST['submit'])) 
    {
        //do function
        header("Location: http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
    }
?>

其中"http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] - 是表单提交后用户将被重定向的链接。

答案 1 :(得分:0)

有两种方法可以去。但我试图解决你的目标,而不是你的具体问题:)

  1. 您可以在表单提交后将浏览器转发到新网址。这是一个非常正常的程序。因此,当您的表单提交时,浏览器会立即重定向到正常的GET URL。现在,如果用户点击刷新,则表单不会再次提交。
  2. 2如果表单是登录对话框等,则应使用另一种方法。将一次会话密钥添加到表单隐藏字段,并将相同的密钥存储在服务器上。现在,如果用户提交表单,请检查密钥是否匹配。如果他们确实接受了提交,并清除密钥。如果用户现在再次点击F5,并且您已经删除了密钥,则只需拒绝提交的值。

答案 2 :(得分:0)

为什么不在提交后清除表单,或为每个提交请求添加会话