Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Jak zliczyć czas zalogowania użytkownika?
Marr
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam wszystkich (mój pierwszy post na forum (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
golaod
post
Post #2





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
calebos
post
Post #3





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
ferrero2
post
Post #4





Grupa: Zarejestrowani
Postów: 171
Pomógł: 32
Dołączył: 5.08.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ale z tego co napisałem można łatwo zrobić to co Ty potrzebujesz...
Go to the top of the page
+Quote Post
Marr
post
Post #5





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


(IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) myślałem, że zakładając temat w przedszkolu dostanę bardziej łopatologiczne podpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/mad.gif) (IMG:http://forum.php.pl/style_emoticons/default/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źć
Go to the top of the page
+Quote Post
calebos
post
Post #6





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
Marr
post
Post #7





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
calebos
post
Post #8





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


Napisalem nawet juz odpowiedz ale tak myslac o tym drugi raz to zostane 'zbulwersowany'.

Powodzenia
Go to the top of the page
+Quote Post
woxala123
post
Post #9





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


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.

Ten post edytował woxala123 7.02.2016, 15:22:22
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 16:31