假设一个父窗口是www.mysite.com/index.php
,它有几个链接。当用户点击这些链接时,会打开一个弹出窗口。
弹出窗口有一些形式。当用户点击提交按钮时,弹出窗口中会调用另一个脚本,如下所示:
if ((isset($_POST['Complete'])) && ($_POST['Complete']=='Complete')) {
unset($_POST['Complete']);
include 'result.php';
return;
}
result.php
将数据输入数据库,并将结果传递给具有以下的父窗口
<script language="JavaScript" type="text/javascript">
window.opener.location.href = 'submission.php';
window.close();
</script>
然后,父窗口显示最终结果,更新主数据库并向用户发送电子邮件。
现在问题来了。
- 用户单击家长上的链接
- 表单打开,但用户单击关闭(浏览器交叉按钮)
- 然后用户关闭父窗口
- 然后用户访问网站的其他页面;说其他.php
- 但是主数据库正在更新,用户正在收到电子邮件(不过所有的
null
值)
由于表单从未完成,因此不应调用result.php
。并且如果从未调用result.php
,则永远不应该调用submission.php。
这里发生了什么?
将关闭按钮的类型更改为按钮。