a me sembra di capire che, prima del codice, c'è un errore di concetto.
Mi spiego: se lanci questo script in ogni pagina, questo aggiornerà tutti gli utenti che sono loggati rendendo nullo ogni timeout. Il risultato sarà che ogni utente loggato risulterà sempre online se non ha fatto il logout.
Per quanto riguarda il codice, supponendo il campo entrata come DATETIME, prova così:
codice:
<?
 $db_host="localhost";
 $db_username="";
 $db_password="";
 $db_name="";

 $myconn = mysql_connect($db_host, $db_user, $db_password) or die("Problemi nella connessione.");

 mysql_select_db($db_name, $myconn) or die("Problemi nella selezione di $db_name. ".mysql_error());
 
 // seleziono il campo user ed il campo entrata in formato unix_timestamp (secondi dal 1/1/70)
 $query = "SELECT user, UNIX_TIMESTAMP(entrata) FROM utenti WHERE entrato = 'si'";
 $result = mysql_query($query) or die("Errore nella query: ".mysql_error());
 // imposto il timeout a dieci minuti in secondi  
 $timeout = 60 * 10;
 // ora attuale in secondi
 $now = time();

 // gli array seguenti servono a diminuire il numero di query
 // inizializzo array in cui posizionare gli utenti online
 $online = array();
 // inizializzo array in cui posizionare gli utenti non online
 $not_online = array(); 

 // ciclo i risultati della query
 while(list($username, $entrata) = mysql_fetch_row($result)) {
      // se entrata in secondi + il timeout è minore dell'ora attuale l'utente va in timeout
      if(($entrata + $timeout < $now) {
           $not_online[] = $username;
      } else {
           $online[] = $username;
      }
 }

 // aggiorno i campi del database
 mysql_query("UPDATE utenti SET entrato='no' WHERE user IN (".implode(",", $not_online).") or die(mysql_error());
 mysql_query("UPDATE utenti SET entrata=FROM_UNIXTIME($now) WHERE user IN (".implode(",", $online).") or die(mysql_error());
?>
ma ripeto, qualsiasi utente aggiornerà anche gli altri utenti.