Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP|MySQL]użytkownicy online, Sprawdzanie kto z zarejstrowanych użytkowników jest online
Sergiusz1996
post 23.07.2010, 21:03:26
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.07.2010

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


Witam.
Ostatnio stworzyłem na stronie system logowania oraz shoutboxa. Logowanie opiera się na PHP. Baza użytkowników mysql.cba.pl
Moje pytanie (a raczej prośba) dotyczy skryptu, który pozwalałby wyświetlać na stronie shoutboxa użytkowników, którzy są online.
Jeśli taki temat już był, proszę o linka. Wujek Google nie wszystko widzi
Pozdrawiam i czekam na odpowiedź - Sergiusz
Go to the top of the page
+Quote Post
flashdev
post 23.07.2010, 21:12:18
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

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


  1. <?php
  2. class online_counter {
  3. private $sql;
  4. private $table;
  5. private $maxTime;
  6.  
  7. public function __construct($sql, $table, $maxTime){
  8. $this -> sql = $sql;
  9. $this -> table = $table;
  10. $this -> maxTime = $maxTime;
  11. }
  12.  
  13. public function update($ip, $time = false){
  14. $time = $time === false ? 'NOW()' : '\'' . $time . '\'';
  15. $ip = ip2long($ip);
  16. $sql = 'INSERT INTO `' . $this -> table . '` (`ip`, `lastmod`) VALUES (' . $ip . ', ' . $time . ');';
  17. if( !$this -> sql -> query($sql) ){
  18. $sql = 'UPDATE `' . $this -> table . '` SET `lastmod` = ' . $time . ' WHERE `' . $this -> table . '`.`ip` = ' . $ip . ';';
  19. return !!$this -> sql -> query($sql);
  20. }
  21. return true;
  22. }
  23.  
  24. public function get(){
  25. $this -> eraseOld();
  26. $sql = 'SELECT * FROM `' . $this -> table . '`;';
  27. $this -> sql -> query($sql);
  28. return $this -> sql -> numRows();
  29. }
  30.  
  31. private function eraseOld(){
  32. $time = date('Y-m-d H:i:s', time() - $this -> maxTime);
  33. $sql = 'DELETE FROM `' . $this -> table . '` WHERE `' . $this -> table . '`.`lastmod` < \'' . $time . '\';';
  34. $this -> sql -> query($sql);
  35. }
  36. }
  37. ?>


Kiedyś napisałem taką klasę, może się przyda winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Sergiusz1996
post 24.07.2010, 07:44:14
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.07.2010

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


Bardzo dziękuję za pomoc, jednak mam dalej pewne problemy:

1) dane sql itd mam powstawiać w miejsca zielonych czy niebieskich?
2)Jak się domyślam w sql muszę utworzyć tabelę. Jak ma wyglądać, a najlepiej coś w tym stylu
  1. CREATE TABLE `uzytkownicy` (
  2. `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `nick` VARCHAR( 32 ) NOT NULL ,
  4. `haslo` VARCHAR( 40 ) NOT NULL ,
  5. `email` VARCHAR( 40 ) NOT NULL ,
  6. `ip` VARCHAR( 20 ) NOT NULL ,
  7. PRIMARY KEY ( `id` )
  8. );


3)Jak zadecydować w którym miejscu będą się wyświetlały aktywne osoby (która część kodu odpowiada za samo wyświetlanie?
Go to the top of the page
+Quote Post
flashdev
post 24.07.2010, 11:24:19
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

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


ad. 1
Nie wiem co u Ciebie jest zielone a co niebieskie smile.gif

ad. 2
oczywiście tak

ad. 3
To tylko klasa operująca na bazie danych, nic tu się nie wyświetla. Dla jasności poniżej zamieszczam krótki opis:

__construct
Konstruktor - jako parametry wymaga podania:
- $sql - prosta klasa do obsługi MySQL
- $table (string) - nazwa tabeli w sql
- $maxTime - czas w sekundach od ostatniego wejścia na stronę osoby, przez który osoba ta ma być uznana jako online

update
Funkcje wywołujesz wszędzie gdzie ma być zliczany dany gość. Parametry:
- $ip - adres ip osoby odwiedzającej, nie musi to być ip, jeśli masz jakiś inny skuteczny sposób rozróżnienia użytkowników
- $time - czas odwiedzin - domyśnie aktualny

get
Funkcja pobiera aktualną ilość gości.
Zwraca ilość gości (int).

eraseOld
Usuwa z bazy nieaktywnych użytkowników.

Ten post edytował flashdev 24.07.2010, 11:25:12


--------------------
Go to the top of the page
+Quote Post
Sergiusz1996
post 24.07.2010, 14:31:29
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.07.2010

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


1) brakuje mi miejsca na wstawienie hasła do bazy (coś w rodzaju configu)
2) Czy mógłbyś mi pomóc ze skryptem wyświetlana. Nie umiem takiego zrobić
3) Ta klasa będzie się podłączała pod tabelę z użytkownikami, jeśli nie proszę o wygląd tabeli, jaka mam utworzyć.
Go to the top of the page
+Quote Post
Mephistofeles
post 24.07.2010, 16:09:41
Post #6





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Lepiej zabierz się od nowa za podstawy. Tutaj nie ma łączenia z bazą, więc nie ma też konfiguracji. Po drugie to tylko przykład, do pracy wymaga z tego co widzę zapisywania ostatniej akcji użytkownika w polu lastmod, to musisz dopisać. Ja bym przy każdym odświeżeniu strony zapisywał (albo zamieniał, jeżeli istnieje) po prostu id usera z czasem do jakiejś tablicy, kasował od razu stare wpisy (starsze niż np. pół godziny) i wyświetlał aktualne.

Edit: Mój błąd, nie doczytałem. Zapisywanie jest, więc teraz tylko (próbuj sam) dopasuj sobie do własnych potrzeb.

Ten post edytował Mephistofeles 24.07.2010, 16:11:04
Go to the top of the page
+Quote Post
Sergiusz1996
post 26.07.2010, 10:48:01
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.07.2010

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


Wiem,że powinienem zabrać się za podstawy. ale ta funkcja jest mi potrzebna na wczoraj. Mówisz "napisz", ale dla mnie nie jest to takie proste. to nie jest html. proszę więc o w miarę gotowe skrypty.

Dałoby się to zrobić na zasadzie, że gdy ktoś się zaloguje w tabeli z danymi pojawia się 1, a gdy wylogowuje - 0. w miejscu, gdzie zalogowani mają być wyświetleni pojawiłaby się tabela z 0 i 1 (oczywiście można to zamienić na online i offline) teraz tylko problem, jak zmodyfikować login.php
  1. <?php include("config.php"); ?>
  2. <?php
  3. $login = $_POST['login'];
  4. $haslo = $_POST['haslo'];
  5. $haslo = addslashes($haslo);
  6. $login = addslashes($login);
  7. $login = htmlspecialchars($login);
  8. if ($_GET['login'] != '') { //jezeli ktos przez adres probuje kombinowac
  9. }
  10. if ($_GET['haslo'] != '') { //jezeli ktos przez adres probuje kombinowac
  11. }
  12. $haslo = md5($haslo); //szyfrowanie hasla
  13. if (!$login OR empty($login)) {
  14. include("head2.php");
  15. echo '<p class="alert">Wypełnij pole z loginem!</p>';
  16. include("foot.php");
  17. }
  18. if (!$haslo OR empty($haslo)) {
  19. include("head2.php");
  20. echo '<p class="alert">Wypełnij pole z hasłem!</p>';
  21. include("foot.php");
  22. }
  23. $istnick = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM `uzytkownicy` WHERE `nick` = '$login' AND `haslo` = '$haslo'")); // sprawdzenie czy istnieje uzytkownik o takim nicku i hasle
  24. if ($istnick[0] == 0) {
  25. echo 'Logowanie nieudane. Sprawdź pisownię nicku oraz hasła.';
  26. } else {
  27. $_SESSION['nick'] = $login;
  28. $_SESSION['haslo'] = $haslo;
  29. header("Location: sb.php");
  30. }
  31. ?>


aby podczas zalogowanie w tabeli pojawiało się 1, a wyloguj.php
  1. <?php
  2. echo 'Wylogowano';
  3. ?>

aby zmieniało się na 0
Go to the top of the page
+Quote Post
dg2001
post 26.07.2010, 13:40:04
Post #8





Grupa: Zarejestrowani
Postów: 71
Pomógł: 12
Dołączył: 9.01.2008
Skąd: Olkusz

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


Źle doczytałem, w momencie gdzie przypisujesz dane do zmiennych sesji, daj sobie update do bazy aby zapisał ci kto jest on-line a kto nie. Jednak to wymaga w bazie odpowiedniego pola. A przy wylogowywaniu znów zmieni ci tą wartość na 0.

Lecz to ma wadę smile.gif Jak ktoś zamknie przeglądarkę bez wylogowania się to niestety będzie dalej widniał jako zalogowany smile.gif

Ten post edytował dg2001 26.07.2010, 13:42:32
Go to the top of the page
+Quote Post
Sergiusz1996
post 27.07.2010, 08:46:50
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.07.2010

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


przydałoby się, by przeglądarka co 5 minut wysyłała na nowo potwierdzenie (0/1) szukałem takiego skryptu, ale nie znalazłem. może ktoś ma taki?
Go to the top of the page
+Quote Post
dg2001
post 27.07.2010, 12:19:28
Post #10





Grupa: Zarejestrowani
Postów: 71
Pomógł: 12
Dołączył: 9.01.2008
Skąd: Olkusz

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


Może jakoś przy wykorzystaniu JavaScript, aby podczas zamknięcia przeglądarki się pytał czy faktycznie chcesz zakończyć pracę np, i jeżeli ktoś kliknie na tak, to w tym momencie wywołuje funkcje wyloguj.

Ale nie znam na tyle JavaScript aby ci pomóc.

Co do sprawdzania co 5 min, też ci to nic nie da jak się zamknie przeglądarkę, chyba że wrzucisz taki skrypt do crona, ale jak by miał to sprawdzać to ci nie powiem

Ten post edytował dg2001 27.07.2010, 12:20:09
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 18:51