Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Użytkownicy online.
Forum PHP.pl > Forum > PHP
Loped
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
RubiX
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.
#luq
Najlepszym rozwiązaniem będzie użycie Session Handlera, o którym jest artykuł w wortalu smile.gif
Loped
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...
RubiX
a w time masz DATE TIME czyDATETIME ?
Loped
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"?
mcgsoft
Do skryptu który usuwa sesje dopisz część do usuwania wpisów z tabeli po uzytym loginie.
Loped
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
mcgsoft
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.
Loped
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'");
    }
nospor
zacznij uzywac wlasciwego bbcode [php]

No przeciez niewazne co, ty albo dodajesz albo updatujesz , wiec sie nie dziw ze ciagle cos sie zmienia smile.gif

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

jest prawdziwe, wiec ci robi inserta
Loped
Jeszcze jedno pytanie ^^. Jak zrobić aby np. po 10 min automatycznie wylogowywało(kończyło sesje)?
mcgsoft

http://forum.php.pl/index.php?showtopic=92301
guitarnet.pl
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';
}
}
Loped
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
erix
Przeczytaj jakiś kurs PHP+MySQL... Nie będziemy budować wież bez cegieł, czyli skryptów bez podstaw.
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.