php variabili a tempo

trattorino

Utente Attivo
23 Lug 2016
173
1
18
43
Ragazzi ciao a tutti, mi afido a qualcuno che ha un idea per quello che vi spiegherò, in poche parole ho due tabelle
1 tabella = last_visit
2 tabella = last_activity
la prima tabella rilascia questo dato = 1
la seconda tabella rilascia questo dato =1
questi dati fissi vengono rilasciati se un utente nel mio sito non accede da 24 ore

se dovesse accedere nel lasso del tempo delle 24 ore quei due dati delle tabelle cambiano e non rimangono uguali.
bene fin qui posso estrapolare stramite la funzione if la possibilità di capire se un utente non accede nelle 24 ore
usando questa formila


PHP:
$tabellauno = $1;
$tabelladue = $1;
if($tabellauno == 1){
echo 'sono offline';
}
bene fin qui ci sono, vorrei tramite questi due dati riuscire a capire se un utente è online nell'arco di 5 minuti
perche i dati nelle due tabelle cambiano se un utente è online in un arco di tempo es:
5 minuti tabella1=32233 tabella2 =433434
35 minuti tabella1=3433433 tabella2 =5334
24 ore di inattivita = tab1=222222 tab2=222222

bene qui vengo alla domanda, è possibile creare una funzione che mi permette di capire che i dati delle tabelle cambiano in un tot di tempo e fargli stampare i dati in un echo?
una funzione che mi puo permettere di capire che se i numeri dentro le tabelle cambiano vuol dire che l'utente è online, spero di essere stato chiaro, e spero che voi maghi del php mi aiutate
 
Ciao, una via potrebbe essere quella di estrarre il valore dalla tabella, salvarlo in una variabile di sessione e periodicamente confrontare il valore di tale variabile con quello contenuto in tabella, aggiornando di volta in volta il valore della variabile di sessione.
 
Quando l'utente effettua il login, recuperi il valore di last_activity e lo salvi in una variabile di sessione.
PHP:
// query di estrazione dei dati
// ... estrai i dati che ti servono, tra cui anche last_activity
// salvandoli in un array ($row, ad esempio)

// inizializzazione delle due variabili
$_SESSION['current_activity'] = $row['last_activity'];
$_SESSION['last_activity'] = $row['last_activity'];

Ora disponi della variabile current_activity e last_activity in ogni pagina in cui inizializzi una sessione.

L'idea è quella di monitorare i valori assunti da last_activity presente in tabella, per vedere se cambia o meno, aggiornando di volta in volta la variabile current_activity ponendola uguale al valore di last_activity e aggiornando altresì la variabile last_activity ponendola uguale al valore presente in tabella, mettendoci in condizione di poterle confrontare molteplici volte.

A tal proposito, la seguente funzione.

PHP:
// l'unico argomento che la funzione richiede è l'oggetto PDO della connessione al db
function check_activity(PDO $conn) {
     // se le due variabili di sessione sono settate...
    if (isset($_SESSION['last_activity']) && isset($_SESSION['current_activity'])) {
        // preparo la query per recuperare last_activity dalla tabella
        $query = "SELECT last_activity from utenti where id_utente = ?";
        $stm = $conn->prepare($query);
        $stm->execute(array($_SESSION['id_utente']));
        $riga = $stm->fetch(PDO::FETCH_ASSOC);
        // se le var current e last sono uguali
        if ($_SESSION['current_activity'] == $_SESSION['last_activity']) {
            // aggiorna il valore di current
            $_SESSION['current_activity'] = $_SESSION['last_activity'];
            // aggiorna il valore di last ponendolo uguale a quello presente orora in tabella
            $_SESSION['last_activity'] = $riga['last_activity'];
            // se le variabili poste a confronto sono uguali torna 0, altrimenti 1
            return 0;

        } else {
            // aggiorna il valore di current
            $_SESSION['current_activity'] = $_SESSION['last_activity'];
            // aggiorna il valore di last ponendolo uguale a quello presente orora in tabella
            $_SESSION['last_activity'] = $riga['last_activity'];
            // se le variabili poste a confronto sono diverse torna 1
            return 1;
        }
    }
}

Ora, ogni volta che desideri vedere se il valore in tabella è rimasto invariato o è cambiato rispetto all'ultima volta che hai controllato, ti basta richiamare la funzione check_activity e controllare il valore da essa assunto.
 
Ultima modifica:
ciao forse si puo trovare una soluzione piu semplice in quanto ho scoperto che le tabelle non rilasciano numeri a caso, ma rilasciano il tempo in secondi che l'utente trascorre nel sito, ad esempio la tabella ultima visita mi rilascia questo dato
1470438244
che sono i secondi che possono essere convertiti qui http://coderstoolbox.net/unixtimestamp/
in local time zone, ora non c'è un modo per convertirli usando php? oppure che ne so calcolare la data di adesso in automatico e fare la qualcosa per calcolare questi secondi 1470438244

ecco trovato il codice per convertire questo dato
PHP:
<?php
    $epoch = 1441216544;
    echo date('r', $epoch);

?>

ora visto che so l'ultima attivita dell'utente come posso far in modo di far sapere che l'utente è online
come posso ifilare dentro un eco la sottrazione della data dell'ultima attività con la data in tempo reale non fissa? in modo da poter ottenere i minuti di attivita
 
Ultima modifica:
dopo smanettamenti vari ho risolto così ora posso stabilire se una
persona è online oppure inattiva e off

PHP:
 $epoch = $tempob;
$dataunoh = date('H', $epoch);
$dataunom = date('i', $epoch);
date_default_timezone_set('r');
$a=time();
$datadueh = date('H', $a);
$dataduem = date('i', $a);

$Sommam = ($dataunom - $dataduem);
$Somma = ($dataunoh - $datadueh);
$Sommaa = '-';
$Sommab = '';
$risultatoh = str_replace($Sommaa,$Sommab,$Somma);
$risultatom = str_replace($Sommaa,$Sommab,$Sommam);
$calcolo = (60 * $risultatoh);
$risultatofinale = ($Sommam + $calcolo);




if($risultatofinale > 300){

echo '<img src="http://wwwxxxcploads/upload-image-if/off.png" class="img-off">' ;

}   elseif ($risultatofinale < 300 && $risultatofinale > 20) {

echo '<img src="http://wwwxxx.it/uploads/upload-image-if/inattivo.png" class="img-off">' ;

}  elseif ($risultatofinale < 20) {

echo '<img src="http://www...it/uploads/upload-image-if/online.png" class="img-off">' ;

}
1+ x me ciao
 
Io ti ho dato una possibile soluzione per quello che hai chiesto, ossia determinare se un valore all'interno di una tabella è cambiato o meno.

Capire invece se una persona è online oppure no è una questione diversa.

Contento che tu abbia risolto, +100 per te :)
 
  • Like
Reactions: Sabo and trattorino

Discussioni simili