PHP - 在刷新时防止重复的表单请求?

时间:2015-06-16 04:47:14

标签: php forms redirect refresh

我有一个表单根据提交的数据进行一些计算,并在同一页面上输出结果。我尝试使用标题303重定向设置后重定向get脚本,但是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();
}

1 个答案:

答案 0 :(得分:0)

使用此代码

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

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