Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][MySQL] Użytkownicy
-Slasher McKagan-
post 14.05.2006, 18:48:22
Post #1





Goście







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
Go to the top of the page
+Quote Post
ActivePlayer
post 14.05.2006, 18:51:14
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


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.
Go to the top of the page
+Quote Post
The Night Shadow
post 14.05.2006, 18:52:37
Post #3





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


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?

Ten post edytował The Night Shadow 14.05.2006, 18:57:27


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
-Slasher McKagan-
post 14.05.2006, 19:00:48
Post #4





Goście







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
Go to the top of the page
+Quote Post
ActivePlayer
post 14.05.2006, 19:06:08
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


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.
Go to the top of the page
+Quote Post
The Night Shadow
post 14.05.2006, 19:08:47
Post #6





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


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


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
-Guest-
post 14.05.2006, 19:09:22
Post #7





Goście







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
Go to the top of the page
+Quote Post
ActivePlayer
post 14.05.2006, 19:14:29
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


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
Go to the top of the page
+Quote Post
M45t3r
post 14.05.2006, 19:16:13
Post #9





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 16.05.2005
Skąd: Lubaczów

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


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)

Ten post edytował M45t3r 14.05.2006, 19:17:50


--------------------
Nie chce pieniedzy, diamentow, tulipanow i fasoli!
Go to the top of the page
+Quote Post
The Night Shadow
post 14.05.2006, 19:18:13
Post #10





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


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.


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
ActivePlayer
post 14.05.2006, 19:26:33
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


@TNS, tak jak piszesz. To czysta logika. Ile ludzi tyle implementacji. Pewnie nie jeden by to jeszcze 'mądrzej' niz my tutaj wymyslił.
Go to the top of the page
+Quote Post
M45t3r
post 30.05.2006, 14:25:03
Post #12





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 16.05.2005
Skąd: Lubaczów

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


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. ?>


--------------------
Nie chce pieniedzy, diamentow, tulipanow i fasoli!
Go to the top of the page
+Quote Post
nospor
post 30.05.2006, 14:30:41
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
M45t3r
post 30.05.2006, 14:36:20
Post #14





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 16.05.2005
Skąd: Lubaczów

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


a wracajc do drugiego pytania; jak rozroznic goscia ? po IP ?


--------------------
Nie chce pieniedzy, diamentow, tulipanow i fasoli!
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: 13.06.2025 - 16:04