Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Użytkownicy online.
Loped
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Witam. Chcę zrobić aby pokazywało mi ilość użytkowników, którzy się zalogowali.(loguje się na sesjach). Nie wiem jak się do tego zabrać. Czy jakieś nowe pole w bazie... czy obsługa cookie's lub w jakiś sposób użyć crona. Dobrze aby np. po 2 min samo się wylogowywało. Dziękuje z góry za pomoc ;p

Ten post edytował Loped 9.04.2009, 12:02:39
Go to the top of the page
+Quote Post
RubiX
post
Post #2





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

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


Tworzysz tabele online
id | login | data (DATETIME)

podczas logowania dodajesz usera do bazy login i date ( NOW() )
Jak user chodzi po stronie to dajesz UPDATE where login=$_SESSION['login']
a oprócz tego skrypt kasujący gdzie data jest starsza od 2 minut czy jakoś tak

Dobrze zrobić też wybór danych z tej tabeli gdzie login=$_SESSION['login'] i jeżeli jest brak to dodajesz insertem login i date (bo npuser może chodzić po stronie zacznie czytać artykuł przez 10 minut a w tym czasie go skasuje z bazy bo czyta dluzej niz 2 minuty a jak przejdzie na inna czesc strony to go znowu dodaje ilepiej daj na 10-15 minut z tym wylogowaniem bo 2min to za krótko.
Go to the top of the page
+Quote Post
#luq
post
Post #3





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Najlepszym rozwiązaniem będzie użycie Session Handlera, o którym jest artykuł w wortalu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Loped
post
Post #4





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Mam zrobione coś takiego:

Kod
<?php
     require('includes/sessions.php');
   require('includes/config.php');
  
  
   $czas=mktime();
   $ip=$_SERVER['REMOTE_ADDR'];
   $staryczas=mktime()-120;
  
   mysql_query("DELETE FROM online WHERE time<'$staryczas'");
  
   $link=mysql_query("SELECT ip FROM online WHERE ip='$ip'");
   $ile=mysql_num_rows($link);
  
     if (isset($_SESSION['prawid_uzyt']) && $ile==0)
       {
       mysql_query("INSERT INTO online VALUES(NULL,'$ip','$czas')");
       }
   else
       {
       mysql_query("UPDATE online SET czas='$czas' WHERE ip='$ip'");
       }
  
   $link=mysql_query("SELECT * FROM online");
   $ile=mysql_num_rows($link);
  
   echo 'Osób online: '.$ile.'
   ';
   ?>


Jak się zaloguje, i odświeżę to dodaje mnie do tabeli "online" lecz po 2 min nieobecności mnie nie kasuje...
Go to the top of the page
+Quote Post
RubiX
post
Post #5





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

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


a w time masz DATE TIME czyDATETIME ?
Go to the top of the page
+Quote Post
Loped
post
Post #6





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Juz naprawione. Podałem złe pole ;P. Ale jeszcze jedno pytanie. Czy ten skrypt jest bezpieczny? Czy nie zaśmieci mi zbytnnio bazy? I jak zrobić jak sie wylogowuje to od razu mnie kasowało w tej tabeli "online"?
Go to the top of the page
+Quote Post
mcgsoft
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.12.2007
Skąd: Somewhere in Poland

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


Do skryptu który usuwa sesje dopisz część do usuwania wpisów z tabeli po uzytym loginie.

Ten post edytował mcgsoft 9.04.2009, 12:35:33
Go to the top of the page
+Quote Post
Loped
post
Post #8





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Zrobiłem tak, ze dodaje nazwe użytkownika zalogowanego do tabeli online. Jak mam zrobić aby wyświetlało mi coś w stylu "Użytkownicy online: Loped, blabla "
jak powinien wyglądać ten kod? ;P
Go to the top of the page
+Quote Post
mcgsoft
post
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.12.2007
Skąd: Somewhere in Poland

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


W telegraficznym skrócie:

  1. <?php
  2. print "zalogowani użytkownicy: ";
  3. $zapytanie=mysql_query("SELECT * FROM tabela_z_logami", $connection);
  4. while($wiersz=mysql_fetch_array($zapytanie){
  5.  
  6. print $wiersz['login'].", ";
  7. };
  8. ?>


mniej więcej.

Ten post edytował mcgsoft 9.04.2009, 12:58:36
Go to the top of the page
+Quote Post
Loped
post
Post #10





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Teraz mam taki problem.. Kiedy nie jestem zalogowany jest ok. Ale jak sie zaloguje i wylogowuje czas nadal się zmienia w tabeli "online" po odświeżeniu strony. o to kod:

Kod
  if (isset($_SESSION['prawid_uzyt']) || $ile==0)
  {
    mysql_query("INSERT INTO online VALUES(NULL,'$ip','$czas', '$nazwa_uz')");
    }
else
    {
    mysql_query("UPDATE online SET czas='$czas' WHERE ip='$ip'");
    }
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




zacznij uzywac wlasciwego bbcode [php]

No przeciez niewazne co, ty albo dodajesz albo updatujesz , wiec sie nie dziw ze ciagle cos sie zmienia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit:
a jesli chodzili ci o inserta, to albo
isset($_SESSION['prawid_uzyt'])
albo
$ile==0

jest prawdziwe, wiec ci robi inserta
Go to the top of the page
+Quote Post
Loped
post
Post #12





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Jeszcze jedno pytanie ^^. Jak zrobić aby np. po 10 min automatycznie wylogowywało(kończyło sesje)?
Go to the top of the page
+Quote Post
mcgsoft
post
Post #13





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.12.2007
Skąd: Somewhere in Poland

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



http://forum.php.pl/index.php?showtopic=92301
Go to the top of the page
+Quote Post
guitarnet.pl
post
Post #14





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

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


alternatywnie: na plikach sesji pod warunkiem ze dla kazdej domeny pliki sesji trzymane sa w osobnych katalogach tmp w przeciwnym wypadku wynik jest zafalszowany, plus rozwiazania brak obciazenia bazy

function users_online()
{
if ( $directory_handle = opendir( session_save_path() ) )
{
$count = 0;
while ( false !== ( $file = readdir( $directory_handle ) ) )
{
if($file != '.' && $file != '..')
{
$count++;
}
}
closedir($directory_handle);
return $count;
}
else
{
return '1';
}
}
Go to the top of the page
+Quote Post
Loped
post
Post #15





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Mam coś takiego:

Kod
$span = (time() - 180);
$la = $lacz -> query("SELECT nazwa_uz FROM uzytkownik WHERE czas>=".$span." ORDER BY id ASC");


Jak mam napisac pętle while do tego aby pokazywało mi nicki zalogowanych? ;P
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Przeczytaj jakiś kurs PHP+MySQL... Nie będziemy budować wież bez cegieł, czyli skryptów bez podstaw.
Go to the top of the page
+Quote Post

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: 25.08.2025 - 01:29