Sulla home page di un mio sito voglio segnalare quanti sono gli utenti on-line e nel forum... e mi baso perciò sul database del forum... visto che quel poco di sito che c'è è abbastanza integrato con esso (riprende le sue sessioni insomma...)
Il problema è che, mi dicono gli utenti, spesso il mio scrptino mi da molti più utenti on-line di quanti ne dia il forum (centinaia conto poche decine)..
ecco il mio codice:
Codice PHP:
//utenti on-line
$sql = "SELECT session_time,session_page
FROM ".SESSIONS_TABLE."
WHERE session_time >= ".( time() - 300 ).';';
$result = $db->sql_query($sql);
$numero_utenti = $db->sql_numrows($result);
echo "Utenti online: $numero_utenti - ";
//utenti nel forum
$num_utenti_forum = 0;
while ( $row = $db->sql_fetchrow($result) )
{
if ( $row['session_page'] > -12 ) $num_utenti_forum++;
/*
le varie sezioni del forum sono individuate con delle costanti numeriche definite
in include/costants.php da 0 a -12 sono le costanti predefinite di phpbb.. sotto il -12
(cioè -13 e minori) sono costanti che ho aggiunto io per alcune sezioni del sito
*/
}
echo "di cui nel forum: $num_utenti_forum
";
Non ci sono notice.
Purtroppo non sono riuscito a beccare io stesso un momento in cui il conto era sballato per provare all'istante la query da phpmyadmin..
questo è quello che fa phpbb stesso invece
Codice PHP:
//
// Get user list
//
$sql = "SELECT u.user_id, u.username, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_time, s.session_page, s.session_ip
FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
WHERE u.user_id = s.session_user_id
AND s.session_time >= ".( time() - 300 ) . "
ORDER BY u.username ASC, s.session_ip ASC";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain regd user/online information', '', __LINE__, __FILE__, $sql);
}
//continua con una lunga sezione di stampa....
mi smebra che faccio la stessa cosa, informazioni di identità a aprte...
qualcuno mi aiuta a scovare il bug?