【问题标题】:PHP - Prevent Duplicate Form Requests On Refresh?PHP - 防止刷新时重复的表单请求?
【发布时间】:2015-08-31 18:21:58
【问题描述】:

我有一个表单,它根据提交的数据进行一些计算,并在同一页面上输出结果。我尝试使用标头 303 重定向设置后重定向获取脚本,但由于某种原因,303 仅适用于 chrome,而不适用于其他浏览器,如 firefox 或 safari。

如果在不使用标题重定向的情况下刷新页面,如何防止我的表单重复提交?

我不是要求对代码进行评论,但如果您能提出一些正确处理此问题的方法,我们将不胜感激。

更新

我最初确实声明标题重定向不起作用,但我继续按照您的建议再次尝试。我不确定我的逻辑哪里出错了。

如果有帖子,所有变量都设置为会话,然后页面被重定向以清除 $_post 数组。当页面重新加载时,会话被分配给变量,然后取消设置和销毁,然后传递这些变量。

但是发生的情况是页面从重定向重新加载,并且数据要么未设置到会话,要么会话也未设置重定向。

这是处理 $_POST 数组并将它们设置为会话的两个代码块,第二个代码块将会话分配给变量,然后取消设置并销毁会话。

session_start();
error_reporting(E_ALL); ini_set('display_errors',1);

if(count($_POST) > 0) {
    (isset($_POST['dob-month'])? $_SESSION['dob-month'] = $_POST['dob-month']:$_SESSION['dob-month'] = null);
    (isset($_POST['dob-day'])? $_SESSION['dob-day'] = ltrim(sanitizeNumInput($_POST['dob-day']),'0'):$_SESSION['dob-day'] =  null);
    (isset($_POST['dob-year'])?$_SESSION['dob-year'] = sanitizeNumInput($_POST['dob-year']):$_SESSION['dob-year'] =null);

    $_SESSION['dob-month'] = $_POST['dob-month'];
    $_SESSION['dob-day'] = $_POST['dob-day'];
    $_SESSION['dob-year'] = $_POST['dob-year'];

        if(isset($_POST['submit'])){
    $_SESSION['submit'] = 1;}


    header("Location: /test-form/",TRUE,303);
}

if (isset($_SESSION['dob-month'])||isset($_SESSION['dob-day'])||isset($_SESSION['dob-year'])){
    (isset($_SESSION['dob-month'])? $month = $_SESSION['dob-month']:$month = null);
    (isset($_SESSION['dob-day'])? $day = ltrim(sanitizeNumInput($_SESSION['dob-day']),'0'): $day = null);
    (isset($_SESSION['dob-year'])?$year = sanitizeNumInput($_SESSION['dob-year']):$year=null);
    (isset($_SESSION['submit'])?$submit = $_SESSION['submit']: $submit = null );


    /*
        Put database-affecting code here.
    */


    session_unset();
    session_destroy();
}

【问题讨论】:

标签: php forms redirect refresh


【解决方案1】:

使用此代码

if (isset($_POST['submit'])) { 

//your codes
//use your current page instead of page.php
header('Location: page.php'); //clears all POST
}

【讨论】:

  • 还是不行。我已经更新了我原来的帖子,以反映您的建议并分享所有事情的处理方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2012-08-17
  • 2012-09-25
  • 2019-07-20
相关资源
最近更新 更多