Update online/offline user dupa un anumit timp

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje:328

Update online/offline user dupa un anumit timp

In baza de date stochez in coloana 'online' data in format UNIX cu time().
Cand cineva se logheaza pe site coloana online se updateaza cu time().
Cand cineva se delogheaza folosind butonul de delogare , coloana se updateaza cu time()-300.

Pe profilul utilizatorului afisez daca acesta este online sau offline.

Doresc ca atunci cand o persoana mai este pe site dupa ce au trecut cele 5 minute (300 secunde) sa i se updateze data din tabel .
Cred ca nu am pus o conditie, sau conditia pusa este gresita, nu imi dau seama ce nu am reusit sa fac... indrumari, sfaturi ?

Cod: Selectaţi tot

// start online/offline //
$time_on_off = time();
$on_off = $baza_date->query("SELECT * FROM `tabel` WHERE `online`+300 > '$time_on_off'")->fetch(PDO::FETCH_ASSOC);

// daca este sesiune //
if(isset($_SESSION['nume']))
{
// daca inca este pe site, sa apara ca este inca online, dupa ce timpul expira //
if($on_off['online']+300 < time())
{
$sa_fim_online = $baza_date->exec("UPDATE `tabel` SET `online` = '$time_on_off' WHERE `nume` = '$_SESSION[nume]'");
}
}
// online / offline //
Ceea ce am gresit si nu reusesc sa remediez este:
Daca sunt logat ca membru X, apoi vine si membrul Y si stau amandoi pe site 20 minute, dupa cele 5 minute, nu se updateaza la amandoi ca inca mai sunt online, ci doar la unul din ei (chiar daca amandoi "rasfoiesc site-ul")... am stat si m-am gandit, dar nu am gasit o solutie unde as fi putut gresii ....

MarPlo Mesaje:4343
Se poate face cu un script ajax.
1. Se pastreaza in sesiune, in php, id-ul utilizatorului.
2. In JavaScript, se apeleaza cu setTimeout() la fiecare 5 minute (5*60*1000) o functie ajax.
3. Functia Ajax apeleaza prin POST scriptul php pentru update.
4. Script-ul php face update la id-ul retinut in sesiune, apoi un Select ca sa retureneze la Ajax (in format json) id-urile si numele celor curent online.
5. In functia Ajax se preia id-urile si numele transmise si se actualizeaza starea online/offline in acea pagina, dupa datele primite.

- Ca sa stii in Javascript ce id are utilizatorul paginii vizitate, cand se creaza pagina pentru afisare in php, se adauga si un cod JS cu id-ul user-ului paginii vizitate, pe care-l poti folosi pentru actualizarea starii online/offline in acea pagina.

Cod: Selectaţi tot

<script> var id_usr_pg =$id_page; </script>

cadou Mesaje:328
Pai aici in codul de update sunt blocat ... ca dupa ce am scris eu in codul de mai sus, nu prea iese, am si specificat cam ce nu imi iese ...
La logare se creaza o sesiune de id, nume si altele .... :d

MarPlo Mesaje:4343
Incearca asa:

Cod: Selectaţi tot

// start online/offline //
$time = time();

// daca este sesiune, reactualizeaza timpul pt. online
if(isset($_SESSION['id'])){
  $baza_date->exec("UPDATE `tabel` SET `online` ='$time' WHERE `id` =".(int)$_SESSION['id']);
}

//acest select e util doar daca vrei sa afisezi ulterior cine e online
$on_off = $baza_date->query("SELECT * FROM `tabel` WHERE `online`>".($time-300))->fetch(PDO::FETCH_ASSOC);
//...
- Coloana `online` sa fie de tip INT.
- Este indicat sa faci Update dupa id /$_SESSION['id'].