单击“返回”按钮后防止重新提交表单

我有2页:

-具有带文本框和“提交”按钮的表单。例如:<form name="frm_register" action="page1.php" method="post">

-用于将文本框的值存储到数据库的php和mysql代码。将php2.php值提交到数据库后,JavaScript会将页面重定向到。例如:

$query = "INSERT INTO traceuser (username) VALUES ('{$username}')";

$result = mysql_query($query, $connection);

echo '<script language="javascript">window.location="page2.php";</script>';

-mysql从数据库检索数据并显示在此页面上。

当我按“后退”按钮时,浏览器将弹出警告消息,提示您将重新提交表单。单击“返回”按钮时如何防止重新提交表单?我是否需要清除page1.php的缓存?如何用php或javascript或ajax来做?


感谢您将javascript替换window.location="page2.php"为php

的答案header('Location: home2.php');。它解决了80%的问题。其余20%的问题如下所示:

    if (strtotime($_SESSION['servertime']) < time()-3){ //10800 = 3 hours 3600 = 1 hour

if (($username != "") AND ($username != $_SESSION[username])){

$_SESSION['servertime'] = $servertime;

$_SESSION['username'] = $username;

$query = "INSERT INTO traceuser (username) VALUES ('{$username}')";

$result = mysql_query($query20, $connection);

header('Location: page2.php');

exit;

} else {

echo "same name"; //problem here

}

}else{

echo "submit multiple data too fast"; //problem here too.

}

}

执行以下步骤时会发生问题:

1)用户成功提交数据,跳至page2.php查看记录。

2)用户单击“返回”按钮,跳回到page1.php。

3)用户提交数据失败,请保留在page1.php上。(因为速度太快或名称相同)

4)用户提交数据成功,跳至page2.php查看记录。

5)用户单击“返回”按钮,但浏览器显示警告消息“将重新提交表单”。

问题出在第3步。第3步没有运行header('Location:

page2.php');,没有跳到page2.php。因此,它导致步骤5显示警告消息。如何解决这个问题?


我已经找到解决20%问题的解决方案,它可以完美地工作。我session['error123']用来决定是否要显示错误消息“同名”。session['error123']如果成功将数据提交到数据库或成功跳转到page2.php,我将杀死我。我还使用header('Location:

page1.php');重定向到自己的页面(同一页面),以使该页面以前忘记提交表单。代码示例:

if ($_SESSION['error123'] == "toofast"){

echo $_SESSION['error123'] ;

}elseif ($_SESSION['error123'] == "samename"){

echo $_SESSION['error123'] ;

}

if (strtotime($_SESSION['servertime']) < time()-3){ //10800 = 3 hours 3600 = 1 hour

if (($username != "") AND ($username != $_SESSION['username'])){

$_SESSION['username'] = $username;

$query = "INSERT INTO traceuser (username) VALUES ('{$username}')";

$result = mysql_query($query20, $connection);

$_SESSION['error123'] = "aa";

header('Location: http://localhost/plekz/page2.php');

exit;

} else {

$_SESSION['error123'] = "samename";

header('Location: http://localhost/plekz/page1.php');

exit;

}

}else{

$_SESSION['error123'] = "toofast";

header('Location: http://localhost/plekz/page1.php');

exit;

}

}

}

注意:您需要缓冲输出,<?php ob_start();?>因为$

_SESSION不能放在header()之前。缓冲区将停止包括会话在内的所有输出,让header()首先发送输出。

回答:

而不是

echo '<script language="javascript">window.location="page2.php";</script>';

您应该在提交后使用header()函数重定向用户。

所以在伪代码中

单击page.php操作上的提交page1.php page1.php将数据提交给数据库调用

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

这样可以避免您的点击后退问题

以上是 单击“返回”按钮后防止重新提交表单 的全部内容, 来源链接: utcz.com/qa/417922.html

回到顶部