大家好,我有部分工作代码。但是我也遇到了一些问题。让我先告诉你我想要实现什么... 在我的网站上,我有一个登录设施,只有当用户登录后才能将所有用户发送到主页。我想在我的页面上显示谁还在登录,并以列表形式显示他们的用户名。
我的代码当前能力...
好的,所以我可以编写代码将加入网站的用户添加到数据库中,然后将该数据库中的每个用户显示到一个div中,这非常棒,因为它显示了所有在线的人...
问题所在...
然而,当用户离开页面时,他们的用户名需要从在线用户数据库中删除。过去,我会使用java的on window close选项来完成此操作。但由于Google Safari和Firefox不再支持此选项,我被迫寻找另一种方法来完成它。
以下代码的功能...
因此,下面的代码加载一个间隔,所以经过一段时间后它将重复其中的代码。代码首先将用户添加到数据库中,然后在网站上显示用户列表,最后从数据库中删除用户,以防万一他们下线。
问题所在...
对于一个用户来说,这一切都很好,但是一旦第二个用户参与进来,它们的间隔时间就不同了。所以我已经从数据库中删除了用户,但这意味着第二个用户显示数据库时,第一个用户不在其中,因为他们被删除了...这也会导致问题,如果一个用户在函数进行一半的时候离线了,那么它会将其留在数据库中,并且无法将其从数据库中删除。
以下是Java代码...
$(document).ready(function() {
var user_name = "<?php print $username ?>";
setInterval(function() {
$.post('onlineusers.php', { name: user_name, action:"joined" });
$.post("onlineusers.php", { action2: "list" }, function(data){
$('#listusers').html(data);
});
$.post("onlineusers.php", { nameleft: user_name, action3:"left" }, function(data){
$('#errorrreport').html(data);
});
}, 5000);
}):
现在有PHP文档代码。
//------------User joined page put into database --------
if( $_REQUEST["name"])
{
$user_name = $_REQUEST['name'];
};
if( $_REQUEST["action"])
{
$action = $_REQUEST['action'];
};
if ($action == 'joined') {
user_joined($user_name);
};
//-----------Listing online users within page -------------
if( $_REQUEST["action2"])
{
$action2 = $_REQUEST['action2'];
};
if($action2 == 'list') {
foreach (user_list() as $user){
echo $user . "<br />";
};
};
//------------ User left delete from the database ------------
if( $_REQUEST["nameleft"])
{
$user_nameleft = $_REQUEST['nameleft'];
};
if( $_REQUEST["action3"]){
$action3 = $_REQUEST['action3'];
};
if($action3 == 'left') {
user_left($user_nameleft);
};
//------ Functions what to do... --------
function user_joined($user_name) {
$user_name = mysql_real_escape_string(htmlentities($user_name));
mysql_query("INSERT INTO users (user_name)VALUES('$user_name')") or die("this didn't happen");
}
function user_left($user_nameleft) {
$user_name = mysql_real_escape_string(($user_nameleft));
$query = mysql_query("DELETE FROM users WHERE user_name = '$user_nameleft'")or die("failed to delete from table");
}
function user_list() {
$user_list = array();
$users_query = mysql_query("SELECT user_name FROM users") or die ("Unable to collect userlist");
while ($users_row = mysql_fetch_assoc($users_query)){
$user_list[] = $users_row['user_name'];
}
return $user_list;
}
上述代码
抱歉有点凌乱,因为我反复编码以使其正常工作。如果有人能帮助我让它正常工作,我会非常感激。现在,如果这不仅仅是上面代码的问题,我可以在页面进入时将用户添加到在线用户数据库,并通过列出数据库中的用户经常性地获取在线用户列表。
下面是实际问题,请求您的帮助...
然而,如果您有任何关于以下代码的想法,那就太好了... 用户离开页面时会出现问题。 我需要一些方法来检查用户是否仍处于活动状态,如果他们没有,则从数据库中删除他们,以便在列表刷新时,该用户不再在列表中。 比如不断发出ping直到没有响应并删除用户数据。
由于我的当前代码存在多个用户和间隔函数同步的问题,它需要考虑到不同的用户将在不同的时间看到列表刷新。
P.S.我也尝试过使用$SESSION,但仍然不确定如何检查离线用户并将它们从数据库中删除,这可能是一种方法。
谢谢,希望有足够的信息可以继续。