在PHP页面退出时从db中删除条目

时间:2013-06-29 17:24:11

标签: php ajax session

我有一个用户试图找到在线人员的php页面。

有一个搜索按钮,单击其中,为数据库中的当前用户创建一个条目,然后控件进入循环,每5秒在数据库中进行一次搜索以查找是否有新条目如果找到了条目,则会向他显示合作伙伴的详细信息。

我希望如果用户在找到合作伙伴之前退出或离开页面,则必须从数据库中删除其条目。

我试图在会话变量中存储针对用户创建的'id',进行ajax调用并删除该条目,但不知何故这个概念不起作用。数据没有被删除。这是因为仍然找到用户或其他东西的循环,我无法得到它。

有谁能告诉我我的做法出了什么问题?

我正在使用的代码片段

window.onbeforeunload = function() {
 funcDeleteonexit();
return "Are you sure you want to navigate away?";
}

function funcDeleteonexit(){
  $.get("functions.php",{
      data:"delete"
  },function(data,status){
 });
 }

在我的functions.php中,我有

if($_GET){
if ($_GET['data']=="delete"){
    echo deletefromDb();
   }
}


function deletefromDb() {

    $mysqli = new mysqli("localhost", "root", "", "test");

    /* check connection */
    if (mysqli_connect_errno())
    {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    $currentid = (int)$_SESSION['currentId'];

    $query1 = "delete from test where id =". $currentid;

    $mysqli->query($query1);
    $mysqli->close();
    return $currentid;
}

2 个答案:

答案 0 :(得分:0)

如果你想在某人离开页面时完成某些事情,那么在大多数情况下,如果你想要解雇某个特定事件,这会给你带来麻烦。有些情况下浏览器无法触发事件(例如客户端崩溃等)。

因此,我建议采用不同的方法。从服务器端控制,不要依赖用户浏览器或输入。

首先,您可以在定期从浏览器中触发Ajax事件的同时轮询数据。你没有说过这个,但我认为你做的是这样的:

function yourrequest(){
   $.ajax({
       type: "GET", 
       url: "your/php/script.php",
       success: function(data){
          // do something, p.e. update a div 
       }
   });
};

setInterval(yourrequest, 5000);

(请不要将此代码示例拆开,仅用于显示基础知识)。

在服务器端,您已在数据库中的某个位置拥有用户ID。向此表添加时间戳字段(称之为last_request或类似的东西)。每次向客户端发送一些数据时,请检查是否有last_request低于所需阈值的用户,并删除这些ID。无需等待特定事件。

这不需要在那里完成,你也可以做一些不同的事情,例如:每5分钟左右完成一次清理工作,这样就可以完全不干扰用户的请求。

答案 1 :(得分:-1)

我建议浏览器不要发送ajax或者中断它。 因此,尝试使您的AJAX请求同步。对于JQuery似乎将async参数设置为false

$.get("functions.php",{
      data:"delete",
      async : false
  },function(data,status){
 });