我有一个表单根据提交的数据进行一些计算,并在同一页面上输出结果。我尝试使用标题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();
}
答案 0 :(得分:0)
使用此代码
if (isset($_POST['submit'])) {
//your codes
//use your current page instead of page.php
header('Location: page.php'); //clears all POST
}