Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Jak zliczyć czas zalogowania użytkownika?
Forum PHP.pl > Forum > Przedszkole
Marr
Witam wszystkich (mój pierwszy post na forum guitar.gif )!
Mam pytanie: jak zliczyć łączny czas zalogowania użytkownika w php/mysql? Problem polega na tym, że nie wiem jak mam się zabrać za to by zamykać sesje przy zamknięciu okna przeglądarki no i ogólnie jak się za to zabrać... Będę się cieszył z każdej pomocy smile.gif
golaod
To jest tak, wrzucasz do bazy timestamp w sekundach czy mikrosekundach (jak wolisz) I nastawiasz przypuśćmy czas na minute. Jeżeli gość nie przejdzie na inną stronę (co oznacza powtórne sprawdzenie w sesji pewnych danych) to znaczy, że był minute na stronie. Jeżeli jednak przeszedł bierzesz drugi timestamp obliczasz różnice i wrzucasz do bazy ile był. Zaś ten nowy timestamp znowu jest nastawiany tylko na minute.
calebos
Ja robie to np przez linka ze zmienna $_GET

  1. <a href='form.php?reset=1'><span>Wyloguj<?php echo $_SESSION['USER']?></span>


Potem sprawdzam if'em czy $reset==1 i niszcze sesje a nastepnie ustawiam header na 'form.php'.
Nie wiem czy sesja uda Ci sie zliczyc 'realny' czas zalogowania.


Przy zalogowaniu zapisz do kolumny INT unixowy timestamp potem przy tym wylogowywaniu if'em co napisalem wyzej dopisz query wyciagajace tego timestampa nastepnie odejmij sobie wartosci i wstaw do innej kolumny suma_czasu potem bedziesz wyciagac to i dodawac wartosc za kazdym razem.

Ale jakie wartosci otrzymasz jak zostawi przegladarke otwarta a masz ustawiona zywotnosc klucza na wiecznosc ?
ferrero2
Musisz skorzystać z sesji :
Przy logowaniu użytkownika informację o użytkowniku zapisujesz w zmiennej $_SESSION['USERNAME']
Następnie przy każdym logowaniu w tabeli gdzie masz użytkowników (u mnie jest to tabela aktywni) o takiej strukturze :

id | imie | czas_out | aktywny |

dodajesz do aktywny znacznik 'a' np w taki sposób.

Kod
$active = 'a';
$aktywny = "UPDATE aktywni SET aktywny = '" . $active . "' WHERE kto = '" .$_SESSION['USERNAME'] . "'";
mysql_query($aktywny);


Odwrotnie robisz wtedy kiedy ktoś klika "wyloguj"

Kod
$active = 'd';
$aktywny = "UPDATE aktywni SET aktywny = '" . $active . "' WHERE kto = '" .$_SESSION['USERNAME'] . "'";
mysql_query($aktywny);


Teraz najważniejsza część ( to co napisałem powyżej poprzez pobranie z tabeli aktywni wszystkich tych którzy mają 'a' w aktywny da CI pogląd kto jest zalogowany i kto nie jeśli wszyscy będą zawsze klikać zaloguj/wyloguj.) Z praktyki wiem że nigdy tak nie ma ponieważ najczęściej zamykana jest przeglądarka i osoba nadal ma status 'a' mimo że osoby już dawno nie ma na stronie. W takim wypadku stosujemy ten kod (czyli dodajemy dodatkowy ogranicznik czasowy).

Kod
<?php
#nawiązujemy połączenie z bazą
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
#ustalamy stronę kodową
mysql_query("SET NAMES 'utf8'");

#do jednej zmiennej przypisujemy obecną datę (w formacie podanym poniżej) do drugiej zmiennej tą samą datę minus 3 minuty
$tajm = date("dmYHis");
$czas = date("dmYHis")-300;

#w tabeli która przechowuje dane o użytkoniwkach przypisujemy datę  wejścia na stronę osobie która jest zalogowana
$dodaj_czas = "UPDATE aktywni SET czasout = '" . $tajm . "' WHERE imie = '" .$_SESSION['USERNAME'] . "'";
mysql_query($aktywny);

#następnie pobieramy informację z bazy czy dana osoba jest aktywna i czy kliknęła na jakiś link w ciągu ostatnich 3 minut
$sql = "SELECT * FROM aktywni WHERE aktywny = 'a' and czasout > '" .$czas . "'";
$result = mysql_query($sql);
$numrows = mysql_num_rows($result);

# w zmiennej $numrows mamy informację o ilości użytkowników online
echo 'Aktualnie zalogowanych : ' . $numrows;

#w ten sposób możesz wyświetlić osoby które są online
while($row = mysql_fetch_array($result))
{
echo $row['imie'];
}
mysql_close();
?>


i tutaj najważniejsze - skrypt musi być umieszczony w nagłówku albo stopce każdej z podstron (w ten sposób czas pobytu będzie ciągle uaktualniany i sprawdzana będize aktywność użytkownika na stronie). Najlepiej zrobić to przez include()

Mam nadzieję że pomogłem.

Pozdrawiam
Mariusz

upss troszkę nie doczytałem tematu... smile.gif Ale z tego co napisałem można łatwo zrobić to co Ty potrzebujesz...
Marr
wstydnis.gif myślałem, że zakładając temat w przedszkolu dostanę bardziej łopatologiczne podpowiedzi mad.gif snitch.gif tak czy inaczej dzięki za pomoc, jeżeli znajdzie się ktoś kto jeszcze prościej spróbuje mi to wytłumaczyć to będę bardzo wdzięczny... Mam problem głównie dlatego, że nigdy nie używałem timestamp()'a i nie wiem z której strony mam się wgryźć
calebos
Stary nikt za Ciebie skryptow pisac nie bedzie.
Forum jest od szybkich pytan bardziej nizeli od opisywania i wklejania gotowych kodow.
Łopatologicznych podpowiedzi szukaj w dokumentacji php.
Dostales w sumie gotowy sposob jak to sie robi nawet ferrero wkleil Ci gotowe kody czego wiecej chcesz ?
Marr
Czy ja napisałem coś, że chce gotowy skrypt? Napisałem, że nigdy nie używałem timestamp'a i z tym moge mieć problem... nie wiem dlaczego się bulwersujesz...
calebos
Napisalem nawet juz odpowiedz ale tak myslac o tym drugi raz to zostane 'zbulwersowany'.

Powodzenia
woxala123
Witam! Sorry ze wracam do starego tematu, tylko mam pewien problem z wyświetleniem petli while. Pokazuje mi userów jednym za drugim. Małe pytanko czy da sie ich wyświetlić po przecinku czy choćby ze spacją. Z góry dzięki za pomoc
okey poradziłęm sobie w ten sposób
echo $row['imie'].', '; i wyswietla po przecinku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.