Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema nel codice....Confusione col tempo!

    Io ho questo codice che inserisco in tutte le pagine del sito:

    Codice PHP:
    <?
    $db_host
    ="localhost";
    $db_username="";
    $db_password="";
    $db_name="";

    $myconn mysql_connect($db_host$db_user$db_password);

    if (
    $myconn == FALSE)
    die (
    "Errore nella connessione. Verificare lo script");

    mysql_select_db($db_name$myconn);

    $query "SELECT * FROM utenti WHERE entrato = 'si'";

    $risultati=mysql_fetch_array(mysql_query($query)); 


    $numrows mysql_num_rows($result);

    if (
    $numrows==0){
    }
    else
    {
    for(
    $x=0$x<$numrows$x++){

    $username $risultati['user'];
    $var2 $risultati['entrata'];

    $var1 date ("H:i:s");


    $ora1 explode(":",$var2);
    $ora2 explode(":",$var1);

    $diff mktime($ora2[0],$ora2[1], $ora2[2],1,1,2000) - mktime($ora1[0], $ora1[1], $ora1[2], 1,1,2000);

    $tempo floor($diff / (60*60)).":".(($diff 60) % 60).":".($diff 60) ;


    $zeri explode(":",$tempo);
    $zeri $zeri[1];


    if (
    $zeri 10)
    {
    $online 'no';
    mysql_query("UPDATE utenti SET entrato = '$online' WHERE user = '$username'");
    }
    else
    {
    $online 'si';
    mysql_query("UPDATE utenti SET entrato = '$online', entrata = '$var1' WHERE user = '$username'");
    }
    }
    }
    ?>
    Serve per capire se una persona è on-line o no...

    Entrato puo' essere yes (quindi è online), no (quindi è off)

    Mentre entrata è l'ora in cui è stato aggiornato (all'inizio viene settata da una pagina per il login nel sito)

    Ora questo codice non funziona...In quanto non viene fatto assolutamente niente!

    Non uppa niente! online rimane sempre si (dal login) e anche l'ora!

    Perché?

  2. #2
    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.
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  3. #3
    Hai ragione!

    Il ciclo dorà solo aggiornare se è online o no...

    Grazie mille...Ora provo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.