Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Pokazywanie Online MySQL + PHP
Mlodycompany
post
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


Witam. Chcę opracowac system, który by pokazywał użytkowników online. Obmyśliłem sobie tak, że w tabeli `users` mam pole `online`. Podstawowa wartośc tego pola to 0. I teraz skrypt:
  1. <?php
  2. $mysq_host = "localhost";
  3. $mysq_user = "root";
  4. $mysq_pass = "root";
  5. $connect = mysql_connect($mysq_host, $mysq_user, $mysq_pass);
  6. $mysq_baza = "baza";
  7. mysql_select_db($mysq_baza);
  8. $post_login = addslashes($_POST['login']);
  9. $post_haslo = addslashes($_POST['haslo']);
  10. $md5 = md5($post_haslo);
  11.  
  12. function f_login($user, $pass){
  13. $result = mysql_query("SELECT * FROM `users` WHERE `login` = '".$user."' AND `haslo` = '".$pass."'");
  14.  while($users = mysql_fetch_array($result)){
  15. if($users[1] == $user && $users[2] == $pass){
  16.  header("Location: index.php");
  17.  $_SESSION['zalogowany'] = true;
  18.  $_SESSION['id'] = $users[0];
  19.  $_SESSION['login'] = $users[1];
  20.  $_SESSION['poziom'] = $users[3];
  21.  $_SESSION['mail'] = $user[4];
  22.  $_SESSION['gg'] = $user[5];
  23.  $_SESSION['tlen'] = $user[6];
  24.  $_SESSION['strona'] = $user[7];
  25.  $_SESSION['wiek'] = $user[8];
  26.  $_SESSION['miasto'] = $user[9];
  27.  $sql = "UPDATE `users` SET `online` = '1' WHERE `ID` = '".$users[0]."' LIMIT 1"; 
  28.  mysql_query($sql);
  29. }
  30.  }
  31. }
  32.  
  33.  
  34. if(isSet($post_login) && isSet($post_haslo)){
  35. f_login($post_login, $md5);
  36. }
  37. if($_GET['action'] == "logout"){
  38. header("Location: index.php");
  39. $sql = "UPDATE `users` SET `zalogowany` = '0' WHERE `ID` = '".$_SESSION['id']."' LIMIT 1"; 
  40.  mysql_query($sql);
  41. }
  42.  
  43. ?>

Mam nadzieje, że kumacie ten skrypcik, ale dla tych co nie kminią go wytłumacze. Skrypt logujący. Po zalogowaniu zmienia wartośc w polu `online` z 0 na 1. Jeżeli user kliknie na wyloguj to zmienia z 1 na 0. I teraz mam problem. Jak user zamknie przeglądarke to ta wartośc sie nie zmienia czyli jest nadal online. Jak zrobic ze po zamknieciu strony wartośc sie zmienia??
Go to the top of the page
+Quote Post
Piniek
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


Nie da się ;] Mozesz zrobic tak ze dodasz jeszcze jedno pole w tabeli user's z datą ostatniej akcji i co jakis okres czasu bedzie odpala skrypt cronem ktory bedzie zmieniaj wartosc online/ofline w zaleznosci czy ostatnia akcja zostala wykonana w przeciagu ostatnich przypuscmy 15minut.

Pozdrawiam
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #3





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


A może automatyczne kończenie sesji po np 15 min i wtedy zmiana wartości??
Go to the top of the page
+Quote Post
Piniek
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


a jak wtedy odpalisz skrypt zmieniający wartość ;]
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #5





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


no naprzykład
  1. <?php
  2. $zmiana_online = zakonczenie sesji po 15min;
  3. if($zmiana_online){
  4. //zmiana wartości
  5. }
  6. ?>


Ten post edytował Mlodycompany 17.04.2008, 16:53:01
Go to the top of the page
+Quote Post
Piniek
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


to nic nie da bo jak ktos wyłączy przegladarkę to nie wykona sie ten skrypt ;]
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #7





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


kurcze szkoda. A może ktoś ma skrypcik pokazujący userów online??
Go to the top of the page
+Quote Post
Kicok
post
Post #8





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Zamiast pola `online` dodaj sobie pole `ostatnia_akcja`. Przy każdym wyświetleniu strony przez użytkownika aktualizuj datę w tej kolumnie.

Do tego zapytanie pobierze wiersze z tabeli `users` w których `ostatnia_akcja` była max 15 minut temu i masz gotowy skrypt.
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #9





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


no tak ale na kazdej stronie bym musial dac skrypt ktory by zmienial dane, ale pomysl jest dobry
Go to the top of the page
+Quote Post
marcio
post
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


  1. <?php
  2. function online($user) {
  3.  
  4. if($db = mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo'])) {
  5. mysql_select_db($pasy['baza']);
  6.  
  7.  
  8. $remote = $_SERVER['REMOTE_ADDR'];
  9.  $aktualny_czas = time();
  10. $limit = 300; 
  11.  $zostalo = $aktualny_czas - $limit;
  12. $dodaj = ("INSERT INTO online(login,czas,ip) VALUES('$user','$aktualny_czas','$remote')");
  13.  $rezultat = mysql_query($dodaj, $db) or die(mysql_error());
  14. $usun = mysql_query('DELETE FROM online WHERE czas < '.$zostalo.''); 
  15.  $usunieto = mysql_query($usun, $db);
  16. $ile_online = ('SELECT DISTINCT login FROM online');
  17.  $osob = mysql_query($ile_online, $db) or die(mysql_error());
  18. $licz = mysql_num_rows($osob);
  19.  
  20. echo('User'ow online: '.$licz.' <Br>');
  21.  
  22. while($nazwa = mysql_fetch_assoc($osob)) {
  23.  
  24.  if(substr($nazwa['login'], -1, 1) != ',') $nazwa['login'] .= ',';
  25.  
  26. echo('<code><b>'.$nazwa['login'].'</b></code> ');
  27.  
  28. }
  29.  }
  30. }
  31. ?>

Moj skrypt z cms zrob z nim co chcesz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

P.S pozmieiaj tabele/kolumny i pasy do mysql i w twoim przypadku tak musisz wywolac
  1. <?php
  2. online($_SESSION['login']);
  3. ?>
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #11





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


Thx. Wyciągne z tego skryptu wnioski i napisze własny skrypt na własne potrzeby (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Skopiowałem ten skrypt. Ciapke zmodyfikowałem, ale jak sie zastanowiłem to mnie przeraziła jedna rzecz, amianowicie przyjmijmy, że user zamknoł przeglądarke i skrypt ktory usunie dane jest nie aktywny czyli ten user bedzie nadal aktywny. Czy dobrze myśle??
Go to the top of the page
+Quote Post
mike
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Mlodycompany @ 18.04.2008, 21:45:49 ) *
Skopiowałem ten skrypt. Ciapke zmodyfikowałem, ale jak sie zastanowiłem to mnie przeraziła jedna rzecz, amianowicie przyjmijmy, że user zamknoł przeglądarke i skrypt ktory usunie dane jest nie aktywny czyli ten user bedzie nadal aktywny. Czy dobrze myśle??
Dorze myślisz.
Dlatego wszystkie takie skrypty są opatrzone błędem. Jak dużym to zależy od Ciebie.

Zwróć uwagę, że często widzi się napisy jak na tym forum:
82 użytkowników aktywnych przez ostatnie 15 minut

Zwyczajowo użytkownika uznaje się za aktywnego przez pewien czas po jego ostatniej akcji. Jak długi to czas? To zależy od Ciebie i natury serwisu. 5min., 10min., 15min., ...
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #13





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


a wpadlem jeszcze na pomysl automatycznego konczenia sesji np po 15min, czy user jest aktywny czy nie. Wtedy by było wiadomo kto jest online i mniej wiecej ile jest online
Go to the top of the page
+Quote Post
marcio
post
Post #14





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Jak widzisz ja z bazy usuwam co 5min user'a jak zamknie przegladarke to juz inny problem
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #15





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


to jak sa zbudowane profesionalne skrypty. przeciez jest jakies wyjscie na kasowanie danych po wyjsciu ze strony
Go to the top of the page
+Quote Post
Piniek
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

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


no to cronem odpalaj skrypt co 15minut, ktory bedzie zmienial wartosc pola na ofline u wszystkich u ktorych ostatnia akcja zostala wykonana pozniej niz 15minut temu
Go to the top of the page
+Quote Post
bim2
post
Post #17





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Ale po co męczyć crona co 15min? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) Niech w skrypcie pobiera useró o ostatniej aktywnosci mniejszej niz 15min a crona co np. 24h do wyczyszczenia caklej tabeli. Będzie wydajniej. :]
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #18





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


yy Panowie może troche jaśniej, a najlepiej skrypty dac (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
bim2
post
Post #19





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


~marcio już Ci kod podał ładny. I tam gdzie masz logowanie usera dajesz (po zalogowaniu) <?php online($nickname); ?>
Oczywiście zmienna $nickname zastąp taką jaką masz z nickiem usera (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #20





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

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


@bim2 ale zauważ to kwestie, że jeżeli user zamknie strone to nadal bedzie online
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 14.09.2025 - 21:19