newwarrior
Erfahrenes Mitglied
Hi,
also ich habe einen kleinen Chat.
Folgendes habe ich mir überlegt und versucht umzusetzen. Bei jedem aktualisieren des Chats (alle 2 sek. automa. durch Ajax) wir eine PHP Funktion aufgerufen die prüft ob der User in der DB als Online gefürht wird, wenn ja, wird nur das Datum aktualisiert, wenn nicht wird er Eingetragen.
Alle Einträge die älter sind als 5 Minuten werden gelöscht.
Die Onlineliste ruft dann alle User ab die dort eingetragen sind.
Jetzt will ich noch eine Liste AFK führen.
Dazu habe ich mir überlegt, alle User die länger als 5 Minuten nichts geschrieben haben als AFK zu makieren.
Dazu habe ich zwei Funktionen, eine Funktion die die Zeit der Last Action aktualisiert, wenn der User eine Nachricht geschrieben hat:
Und einer weitere Funktion, die prüft ob der User AFK ist, und wenn ja, seinen Status ändern (0 = offline, 1 = afk)
Doch alle User werden die ganze Zeit als Online angezeigt.
Ich weiß nicht wo ich meinen Denkfehler habe.
Kann mir vielleicht einer von euch einen Tipp geben?
also ich habe einen kleinen Chat.
Folgendes habe ich mir überlegt und versucht umzusetzen. Bei jedem aktualisieren des Chats (alle 2 sek. automa. durch Ajax) wir eine PHP Funktion aufgerufen die prüft ob der User in der DB als Online gefürht wird, wenn ja, wird nur das Datum aktualisiert, wenn nicht wird er Eingetragen.
Alle Einträge die älter sind als 5 Minuten werden gelöscht.
PHP:
###############################################################################
#
# user_online_check / check if user is online
#
###############################################################################
function user_online_check($db) {
$nick_session = $_SESSION['userid'];
$n = $_SESSION['playername'];
$delet_time = time() - 300;
$time = time();
$select_online = 'Select user_id FROM online_user WHERE user_id = "'.$nick_session.'"';
$result_online_check = mysql_query($select_online,$db) OR die(mysql_error());
if ($result_online_check['user_id'] > 0)
{
$update_online_time = 'UPDATE online_user SET online_time = "'.$time.'" WHERE user_id = "'.$nick_session.'"';
mysql_query($update_online_time,$db);
}
else
{
$insert_new_online_time = "INSERT INTO `usr_web517_1`.`online_user` (`user_id`, `playername`, `online_time`, `afk_user`) VALUES ('$nick_session', '$n', '$time', '0')";
mysql_query($insert_new_online_time,$db);
}
$delet_old = 'DELETE FROM online_user WHERE online_time < "'.$delet_time.'" OR playername = ""';
mysql_query($delet_old,$db) OR die(mysql_error());
$delet_old = 'DELETE FROM last_action_user WHERE last_action_time < "'.$delet_time.'"';
mysql_query($delet_old,$db) OR die(mysql_error());
}
Jetzt will ich noch eine Liste AFK führen.
Dazu habe ich mir überlegt, alle User die länger als 5 Minuten nichts geschrieben haben als AFK zu makieren.
Dazu habe ich zwei Funktionen, eine Funktion die die Zeit der Last Action aktualisiert, wenn der User eine Nachricht geschrieben hat:
PHP:
###############################################################################
#
# update_last_action_time / Update Last Action Time
#
###############################################################################
function update_last_action_time($db) {
$nick_session = $_SESSION['userid'];
$delet_time = time() - 300;
$time = time();
$select_online = 'Select user_id FROM last_action_user WHERE user_id = "'.$nick_session.'"';
$result_online_check = mysql_query($select_online,$db) OR die(mysql_error());
if ($result_online_check['user_id'] > 0)
{
$update_online_time = 'UPDATE last_action_user SET last_action_time = "'.$time.'" WHERE user_id = "'.$nick_session.'"';
mysql_query($update_online_time,$db);
}
else
{
$insert_new_online_time = "INSERT INTO `usr_web517_1`.`last_action_user` (`user_id`, `last_action_time`) VALUES ('$nick_session', '$time')";
mysql_query($insert_new_online_time,$db);
}
}
PHP:
###############################################################################
#
# change_user_status / Setet status of user afk when last action more then 5 minutes
#
###############################################################################
function change_user_status($db)
{
$nick_session = $_SESSION['userid'];
$delet_time = time() - 1;
$select_online = 'Select user_id FROM last_action_user WHERE user_id = "'.$nick_session.'" AND last_action_time < "'.$delet_time.'"';
$result_online_check = mysql_query($select_online,$db) OR die(mysql_error());
if ($result_online_check['user_id'] > 0)
{
$update_online_time = 'UPDATE online_user SET afk_user = "1" WHERE user_id = "'.$nick_session.'"';
mysql_query($update_online_time,$db);
}
else
{
$update_online_time = 'UPDATE online_user SET afk_user = "0" WHERE user_id = "'.$nick_session.'"';
mysql_query($update_online_time,$db);
}
}
Ich weiß nicht wo ich meinen Denkfehler habe.
Kann mir vielleicht einer von euch einen Tipp geben?