php – 单击“返回”按钮后阻止重新提交表单
我有2页:
page1.php: – 有一个带有文本框和“提交”按钮的表单.例如:< form name =“frm_register”action =“page1.php”method =“post”> – 用于将textbox的值存储到数据库的php和 mysql代码.将值提交到数据库后,Javascript会将页面重定向到php2.php.例如: $query = "INSERT INTO traceuser (username) VALUES ('{$username}')"; $result = mysql_query($query,$connection); echo '<script language="javascript">window.location="page2.php";</script>'; 使page2.php 问题:当我按“返回”按钮时,浏览器会弹出一条警告消息,表示该表格将重新提交.单击“返回”按钮时如何防止重新提交表单?是否需要清除page1.php的缓存?如何用php或javascript或ajax做到这一点? 更新1:感谢您将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. } } 执行以下步骤时会发生此问题: 问题是由于步骤3.步骤3没有运行标题(‘Location:page2.php’);,没有跳转到page2.php.因此它会导致步骤5显示警告消息.如何解决这个问题? 更新2:我已经找到了解决20%问题的解决方案,它运行得很好.我使用session [‘error123’]来决定是否要显示错误消息“同名”.如果成功将数据提交到数据库或成功跳转到page2.php,我会终止会话[‘error123’].我也使用标题(‘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()之前. Buffer将停止所有输出,包括session,让header()先发送输出. 解决方法
而不是
echo’< script language =“javascript”> window.location =“page2.php”;< / script>‘; 您应该使用header()函数在提交后重定向您的用户. 所以在伪代码中, 单击page.php action page1.php上的提交 header('Location: http://example.com/page2.php'); 这应该可以防止您点击回来的问题 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |