errore in una funzione...non riesco ad individuarlo!

alo

Utente Attivo
22 Dic 2011
53
0
0
27
Ho un piccolo problema. Sto cercando di mostrare agli utenti del sito tutti gli utenti (registrati) che sono loggati in quel momento.
Per farlo ho utilizzato una classe che si occupa di inserire l'id dell'utente appena loggato nella tabella e controlla se è inattivo oppure no tramite la funzione clearTable(). La classe funziona fino ad un certo punto: inserisce nella tabella gli utenti loggati e li mostra, ma nn controlla se sono attivi oppure no... e questo mi fa pensare ad un errore nella funzione clearTable(), ma nn lo trovo! Qualcuno di voi potrebbe aiutarmi?
Grazie infinite!

PHP:
class OnlineUsers {
    
    private $id;
    private $conn;
    private $host = "";
    private $username = "";
    private $password = "";
    private $database = "";
    
    public function __construct($id) {
        $this->id = $id;
        $this->clearTable();
        $this->conn = mysql_connect($this->host, $this->username, $this->password);
        mysql_select_db($this->database,$this->conn);
        $query = "SELECT utente FROM online_users WHERE utente = $this->id";
        $result = mysql_query($query,$this->conn);
        if(mysql_num_rows($result) == 1) {
            $this->update();
        } else {
            $this->insert();
        }
    }
    private function insert() {
        mysql_select_db($this->database,$this->conn);
        $query = "INSERT INTO online_users (utente, data) VALUES ($this->id,NOW())";
        if($result = mysql_query($query,$this->conn)) {
            return true;
        } else {
            return false;
        }        
    }
    private function clearTable() {
        mysql_select_db($this->database,$this->conn);
        $query = "DELETE FROM online_users WHERE data < SUBDATE(NOW(), INTERVAL 11 MINUTE)";
        if($result = mysql_query($query,$this->conn)) {
            return true;
        } else {
            return false;
        }
    }
    private function update() {
        mysql_select_db($this->database,$this->conn);
        $query = "UPDATE online_users SET data = NOW() WHERE utente = $this->id";
        if($result = mysql_query($query,$this->conn)) {
            return true;
        } else {
            return false;
        }
    }
    public function getUsersName() {
        mysql_select_db($this->database,$this->conn);
        $query = "SELECT * FROM utenti, online_users WHERE utenti.id = online_users.utente";
        $result = mysql_query($query) or die(mysql_error());
        $users_online = array();
        while($row = mysql_fetch_array($result)) {
            $users_online[$row['id']] = $row['username'];
        }
        return $users_online;
    }
    public function countOnline() {
        mysql_select_db($this->database,$this->conn);
        $query = "SELECT COUNT(*) AS num_user FROM online_users ORDER BY data ASC";
        $result = mysql_query($query) or die(mysql_error());
        $fetch = mysql_fetch_array($result);
        return $fetch['num_user'];
    }
}

La classe in parte l'ho scritta io in parte no... l'ho trovata su un tutorial ma l'ho modificata perchè quella postata nel tutorial non mi funzionava proprio.
 
if ($result = mysql_query($query, $this->conn)) {
return true;
}
Non so se puo essere questa la causa ma i paragoni nelle if si dovrebbero fare con il doppio =

PHP:
if ($result == mysql_query($query, $this->conn)) {
            return true;
        }

a no vedo ora che non è un paragone, scusa
 
Ultima modifica:
No, il codice è giusto, anche se ridondante. Scrivere:
PHP:
if ($result = mysql_query($query, $this->conn)) {
Significa:
  1. assegna alla variabile $result il risultato dell'espressione;
  2. verifica che la variabile $result sia vera;
Ed è l'equivalente di:
PHP:
$result = mysql_query($query, $this->conn);
if ($result) {
Si usa quando nel codice avrai bisogno di leggere la variabile. In questo caso non è necessaria l'assegnazione.
 
Grazie delle risposte...ma non è quello il problema...scrivere
PHP:
if($result = mysql_query($query,$this->conn)) {
      //codice
}
è uguale a
PHP:
$result = mysql_query($query,$this->conn);
if($result) {
      //codice
}
come hai detto tu...
 
ho risolto modificando la posizione della chiamata alla funzione
PHP:
$this->clearTable();
nel costruttore.
 

Discussioni simili