一尘不染

按下F5时避免在php中重新提交表单

php

我的网站上有以下代码(使用php和smarty),试图避免在我按f5时重新提交表单:

if ($this->bln_added == false) {
    if (isset($_POST['submit'])) {
        $this->obj_site->obj_smarty->assign('title', $_POST['tas_heading']);
        $this->obj_site->obj_smarty->assign('desc', $_POST['tas_description']);
    }
} else {
    $this->obj_site->obj_smarty->assign('title', '');
    $this->obj_site->obj_smarty->assign('desc', '');
    unset($_POST);
}

bln_added默认情况下为false,但一旦成功提交表单,则更改为true。模板中使用了smarty变量title和desc来将表单内容保留在其中,以防出现用户错误并且需要更改其输入内容。

如果成功提交了表单,则它将bln_added = true设置为第二位,因此代码的第二位不仅应清除表单字段,还应清除$
_POST空。但是,如果按f5键,则发布数据仍然存在。

有任何想法吗?


阅读 229

收藏
2020-05-29

共1个答案

一尘不染

您的方法在理论上可以起作用,但是有一种更简单的方法。

成功提交表单后,执行重定向。没关系,但是会清除$ _POST。

header('Location: http://www.example.com/form.php');

就您而言,这听起来像您想重定向到已经打开的页面。如果要显示确认消息,请在URL上附加$ _GET参数。

希望这可以帮助,

汤姆

2020-05-29