Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][MySQL] Użytkownicy
Forum PHP.pl > Forum > Przedszkole
Slasher McKagan
Witam!

Napisałem prosty skrypt. Rejestracja, logowanie uzytkownikow + zmiana ich danych. Teraz chciałem, zrobić blok w ktorym wyświetlać się będzie lista zalogowanych użytkowników. Mysle - żaden problem, przy logowaniu się, do bazy prefix_session dodam dane:

id | nid | nick | data | ip |,


a potem tylko select, przy wylogowywaniu się usuwam te dane, ale nie w tym tkwi mój problem. Co w przypadku gdy użytkownik się nie wyloguje? Oczywiście blok dalej będzie wyświetlał jego dane, więc jak usunąć te dane bez kliknicia w link wyloguj w przypadku gdy użytkowik nie jest aktywny przez np. 15 minut ? Proszę o jakąś podpowiedź smile.gif)

Z góry dziękuje
Pozdrawiam
Slasher smile.gif
ActivePlayer
moze lepiej przechowuj dane ostatniej aktywnosci usera. Czyli jesli zalogowany user robi 'cokolwiek' wpisujesz ten czas do bazy, np w tabeli z jego danymi. A pokazywanie ludzi 'on line' to kwestia wybrania wszystkich ludzi, którzy czas aktywnosci ustawiony mają na młodszy niz 15 min temu.

__
Zachęcam do rejestracji na forum.
The Night Shadow
Hmm... ja miałem kiedyś podobny problem. Napisałem w związku z tym funkcje, która usuwała z tabeli SESSION wszystkie rekordy z czasem mniejszym od ustalonego przeze mnie (10 minut). Co przy okazji powoduje, że brak aktywności użytkownika przez 10 minut powoduje jego automatyczne wylogowanie. W tabeli SESSION dodałem kolumnę OSTATNIA_AKTYWNOŚĆ. Na każdej z podstron to pole jest aktualizowane dzięki czemu wylogowanie następuje nie po 10 minutach od zalogowania, a od ostatniej aktywności.

Active... a co z rekordami, które pozostają? Ja je usuwam, a Ty proponujesz pozostawiać i wybierać tylko z odpowiednią datą ostatniej aktywności użytkownika. W Twoim rozwiązaniu potrzebne byłoby kolejne zapytanie o istnienie rekordu użytkownika w tabeli SESSION. Licząc, że kiedyś tam wszyscy użytkownicy byliby zalogowani, czyli posiadali by odpowiadające im rekordy w tej tabeli, miałoby się po prostu drugą tabelę z danymi użytkowników. Czy przy dużej ilości użytkowników nie bardziej wydajnym jest pozostawianie jedynie danych użytkowników ostatnio aktywnych?
Slasher McKagan
Proszę mnie poprawić jeśli źle myśle:


No więc. Do tabeli _users dodaj pole ostatnia_aktywność, któro będzie przechowywało date. Tworze plik.php includowany do kazdej podstrony(?), w którym robię update tej daty. Potem robię select daty, ale tylko tej wcześniejszej przykładowo 10 minut (19,50 to robie select <19,40) questionmark.gif

@The Night Shadow nie chodzilo mi o to, zeby user sie wylogowal po tych 15 minutach smile.gif Bo co jeśli zaznaczył opcje "zapamiętaj mnie" questionmark.gif
ActivePlayer
tak, dokładnie to mialem na mysli. minusem jest ze liczysz tylko zarejestrowanych online. zeby liczyc tez nie zarejestrowanych najlepiej otworzyc sobie tabele na takie wpisy, ale nie łączyc ich w zaden sposob z logowaniem, tylko np z id sesji.
The Night Shadow
Hmm... więc w zależności od tego, czy jest zapamiętany, czy nie wylogowujesz, go lub nie... :- ) Zwiększa to możliwości portalu.

Wykonujesz select użytkowników z tabeli USERS dla których w tabeli SESSION ostatnia_aktywnosc < 10 minut
Guest
No więc następna myśl mi się nasuwa smile.gif)

Każdy zalogowany użytkoniwk posiada u mnie sessje
  1. <?php
  2. $_SESSION['zalogowany]
  3. ?>
. Więc stworze plik.php includowany do kazdej podstorny, z polami

id | nick | data | ip

jezeli
  1. <?php
  2. $_SESSION['zalogowany']=='0';
  3. ?>
pole nick, zawierać będzie wartość guest/gość czy jak sobie to nazwę, jeżeli 1, to jego nick. Następnie select != gosc/gest and data = data-10 minut questionmark.gif i delete * wher data = data-11/10 questionmark.gif
ActivePlayer
Cytat
Następnie select != gosc/gest and data = data-10 minut questionmark.gif i delete * wher data = data-11/10 questionmark.gif

!= gosc/quest to pobierasz wszystkich userów zalogowanych a == gosc jesli chcesz niezalogowanych.

Musisz pamietac tez ze jesli ktos juz jest w tabeli to robisz update a nie insert smile.gif
M45t3r
ok to zamiast nick, id kolesia, wiec jezeli cos zmienie to bedzie dalej ok. i z ta kolumna to sie dobrze rozumiemy smile.gif). Podsumowując.

Tworze tabele _sesion z polami

id | z | nid | data | ip

przy kazdym wejsciu update daty
wyswietlanie, data > data-10, i z = 1
delete where data ...

..sie nie zgadza:P

questionmark.gif tongue.gif

@activeplayer, wiem smile.gif)
The Night Shadow
Active... a co z tym usuwaniem rekordów wylogowanych użytkowników? Lepiej to robić, czy nie? :- ) W momencie, gdy użytkownik nie ma zaznaczonej opcji ZAPAMIETAJ MNIE po wylogowaniu następuje zapisanie, go jako gość... jeśli więcej na stronę nie zajrzy jego rekord zostanie i tak usunięty przy wizycie jakiegokolwiek użytkownika.
ActivePlayer
@TNS, tak jak piszesz. To czysta logika. Ile ludzi tyle implementacji. Pewnie nie jeden by to jeszcze 'mądrzej' niz my tutaj wymyslił.
M45t3r
No wiec ok, zrobilem (prawie) ale zostal jeden blad... gdy gosc odswiezy strone, to dodaje go jeszce raz do bazy, jak temu zapobiec questionmark.gif wstawic ciastko

setcookie('jest', ''); i sprawdzac czy jest ? jesli jest to update (ale jak rozroznic goscia questionmark.gif) a jak nie ma to insert questionmark.gif

tutaj kod...

  1. <?php
  2. function session()
  3. {
  4. session_name('sid');
  5. session_register('zalogowany');
  6. $ip = $_SERVER['REMOTE_ADDR'];
  7.  if(isset($_COOKIE['nick']) && isset($_COOKIE['pass']))
  8.  {
  9. $query = "SELECT * FROM `pixarcell_users` WHERE nick ='".$_COOKIE['nick']."'";
  10. $result = mysql_query($query);
  11. while($row = @mysql_fetch_assoc($result))
  12. {
  13. if($row['pass']==$_COOKIE['pass'])
  14. {
  15. $_SESSION['zalogowany']='1';
  16. }
  17. else
  18. {
  19.  $_SESSION['zalogowany']='0';
  20. }
  21. }
  22.  }
  23.  else
  24.  {
  25.  $_SESSION['zalogowany']='0';
  26.  }
  27. //----------------------------------------------------------------------------//
  28. $data = date(Hi);
  29. $dataDoSkasowania = $data-1;
  30. if($_SESSION['zalogowany']=='1')
  31. {
  32.  $query = "SELECT id FROM `pixarcell_users` WHERE nick ='".$_COOKIE['nick']."'";
  33.  $result = mysql_query($query);
  34.  while($row = @mysql_fetch_assoc($result))
  35.  {
  36. $idZalogowanego = $row['id'];
  37.  $sql = mysql_query("SELECT * FROM `pixarcell_session` WHERE nid = ".$row['id']."");
  38.  $czyJestZalogowany = mysql_num_rows($sql);
  39.  if( $czyJestZalogowany=='0')
  40.  {
  41. $query = "INSERT INTO `pixarcell_session` VALUES ('NULL', '".$_SESSION['zalogowany']."', '".$row['id']."', '".$data."', '".$ip."')";
  42. $result = mysql_query($query);
  43. if($result)
  44. {
  45. echo 'Dodany do bazy usera ...';
  46.  
  47. }
  48.  }
  49.  else
  50.  {
  51. $query = "UPDATE `pixarcell_session` SET data = '".$data."' WHERE nid = '".$idZalogowanego."'";
  52. $result = mysql_query($query);
  53. if($result)
  54. {
  55. echo 'Uaktualniono dane';
  56. }
  57.  }
  58.  }
  59. }
  60. else
  61. {
  62. $query = "INSERT INTO `pixarcell_session` VALUES ('NULL', '".$_SESSION['zalogowany']."', '', '".$data."', '".$ip."')";
  63. $result = mysql_query($query);
  64. if($result)
  65. {
  66. echo 'Dodany do bazy goscia...';
  67. }
  68. }
  69. $query = "DELETE FROM `pixarcell_session` WHERE data < '".$dataDoSkasowania."'";
  70. $result = mysql_query($query);
  71. if($result)
  72. {
  73.  echo '<br />wyjebales..';
  74. }
  75. }
  76. function PokazZalogowanych()
  77. {
  78.  $query = "SELECT * FROM `pixarcell_session` WHERE z = '1'";
  79.  $result = mysql_query($query);
  80.  while($row = @mysql_fetch_assoc($result))
  81.  {
  82.  $zalogowanychUserow = mysql_num_rows($result);
  83.  }
  84.  echo 'Zalogowanych użytkowników '. $zalogowanychUserow;
  85.  //-----------------------------------------------------------------//
  86.  $query = "SELECT * FROM `pixarcell_session` WHERE z = '0'";
  87.  $result = mysql_query($query);
  88.  while($row = @mysql_fetch_assoc($result))
  89.  {
  90.  $anonimowychUzytkownikow = mysql_num_rows($result);
  91.  }
  92.  echo '<br />Gości '. $anonimowychUzytkownikow;
  93.  
  94. }
  95. ?>
nospor
Cytat
gdy gosc odswiezy strone, to dodaje go jeszce raz do bazy, jak temu zapobiec questionmark.gif

http://forum.php.pl/index.php?showtopic=44383
M45t3r
a wracajc do drugiego pytania; jak rozroznic goscia ? po IP ?
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.