繁体   English   中英

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

[英]How to make a form submit only on button click not on refresh?

我有一个表单,仅当表单字段更改时,我才应使表单提交(对服务的请求);如果用户刷新页面时字段未更改,则不应再次提交表单。

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

相反,仅当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>

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

第一次发送表单数据时,请使用重定向。

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

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

有两种方法。 但是我尝试解决您的目标,而不是您的特定问题:)

  1. 提交表单后,您可以将浏览器转发到新的URL。 这是非常正常的过程。 这样,当您提交表单时,浏览器会立即重定向到普通的GET URL。 现在,如果用户单击刷新,则不会再次提交表单。

2如果表单是登录对话框等,则应使用的另一种方法。将一次性会话密钥添加到表单隐藏字段中,并将相同的密钥存储在服务器上。 现在,如果用户提交表单,请检查键是否匹配。 如果他们确实接受提交,请清除密钥。 如果用户现在再次按下F5,并且您已经删除了键,只需拒绝提交的值即可。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM