【发布时间】: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();
}
【问题讨论】:
-
你试过什么?这里有很多线程可以使用。 stackoverflow.com/questions/17106885/…
标签: php forms redirect refresh