![]() |
![]() ![]() |
![]() |
![]()
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) |
|
|
![]()
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.
|
|
|
![]()
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
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 ? |
|
|
![]()
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... |
|
|
![]()
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źć
|
|
|
![]()
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 ? |
|
|
![]()
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...
|
|
|
![]()
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 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 12 Dołączył: 9.01.2010 Ostrzeżenie: (10%) ![]() ![]() |
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 16:31 |