设一个客户端标志变量,如果进行了动作就置相应状态,onbeforeunload时判断标志变量的值,如果为原值则提交一个请求到服务端update数据库,为新值不做这个提交。

解决方案 »

  1.   

    我现在是只能这样实现,做一个关闭按钮,这个关闭按钮触发后到下一个页面然后update数据库,恢复值,然后关闭,但是这样就无法控制用户点窗口关闭,我试了用onbeforeunload但是onbeforeunload好像只能返回提示,并不能执行sql语句,我写的是PHP页面
      

  2.   

    <body unonload=write_data()>
      

  3.   

    请问8080,是在write_data()里写PHP和执行SQL吗,我试过这样是不行的
      

  4.   

    以下测试通过<script>
    function mycheck()
    {
    //这里加条件判断
    myifrm.document.myform.submit();
    }
    </script>
    <body onbeforeunload=mycheck()>
    ok
    <iframe id=myifrm src="hidden.htm" style="display:none"></iframe>hidden.htm
    <form name=myform action=update.php>
    </form>update.php
    <?php
    require("pass.inc");
    require("rs.inc");
    require("func.inc");$dbm = new database();
    if (! $dbm->connect2(DB_HOST, DB_USER, DB_PASSWORD)) {
        abort("test1", __LINE__, $dbm->errstring);
    }
    if (! $dbm->selectdb("test1102")) {
        abort("test2", __LINE__, $dbm->errstring);
    }$rsm = new recordset($dbm);$tmpSql = "update test set username=\"second\" where username=\"first\"";if (! $rsm->open($tmpSql)) {
        abort("test3", __LINE__, $rsm->errstring);
        $rsm->close;
    }$rsm->close;
    $dbm->close;
    ?>
      

  5.   

    先谢谢seabell(百合心),但是我按你写的不行啊,点右上角关闭按钮,这段代码没有起作用,不知道您是怎么测试通过的,是不是有我没有注意到的地方
      

  6.   

    我在
    function mycheck()
    {
    //这里加条件判断
    myifrm.document.myform.submit();
    }
    里加了一句alert(1),关闭提示有提示,但是myifrm.document.myform.submit();
    不起作用
      

  7.   

    我试过了,关闭窗口时是会提交隐含帧的,也就是会执行$tmpSql = "update test set username=\"second\" where username=\"first\"";
    在页面上不会有任何反应,你可以查看表里的值。
    我试过,关闭前和关闭后是不同的值,update正常。
      

  8.   

    其实我试了下,关键是我myifrm.document.myform.submit();这句报错,说拒绝访问
      

  9.   

    <script>
    function mycheck()
    {
    //这里加条件判断
    myifrm.document.myform.submit();
    }
    </script>
    <body onbeforeunload=mycheck()>
    ok
    <iframe id=myifrm src="hidden.htm" style="display:none"></iframe>你的htm文件是这样写的吗?页面中加了<iframe id=myifrm src="hidden.htm" style="display:none"></iframe>吗
      

  10.   

    我的代码<?phpinclude("../web/include/function.php");
    include("../web/include/database.php");$db=new Database();
    $db->Connect();
    ?>
    <html><?php
    if ($db->conn==null)
    {
    $db->Connect();
    }
    $order_id=$id;$sql="select * from orders where order_id='".$id."'";$res = mysql_query($sql, $db->conn) or die(mysql_error());
    $res_num = mysql_num_rows($res);
    $row = mysql_fetch_array($res);$flag=trim($row["flag"]);
    if ($flag=="1"){
    $sql="update orders set flag='0' where order_id = '$order_id'";
    $db->DoInsert($sql);
    }else{
    echo "<script>alert('此订单不可操作!');opener.location.reload();window.close(); </script>";
    }?>
    <body onbeforeunload="mycheck();">
    <iframe id=myifrm src="hidden.htm" style="display:none"></iframe>    <table align="center">
     <tr>
    <input type="button" value="关闭" onClick="orderclose();">
          </td>
      </tr>
      </table>
    </form><?php
    mysql_close ($db->conn);
    ?>
    </body>
    </html><script language=javascript>
    function mycheck(){
    alert (1);
    myifrm.document.myform.submit();
    }
    function orderclose(){
    var o=window("myifrm").document.all;
    alert (o);
    }
    </SCRIPT>
      

  11.   

    hidden.htm代码
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    </HEAD><BODY>
    <?php echo "<script>alert (<?php echo $order_id;?>); </script>"?>
    <form name="myform" action="orderclose.php?order_id=<?php echo $order_id;?>">
    <input type=text name=aaa value=123>
    </form>
    </BODY>
    </HTML>
      

  12.   

    调试了半天出现访问拒绝,是我自己打错了名字,一个是hidden.php 一个是hidden.htm
    现在发现好像只有htm才能转到后面一页,但是后面一页需要$order_id这个值,我应该怎么传过去?