Avatar billede subit Nybegynder
16. juni 2003 - 23:10 Der er 10 kommentarer

Online tæller?

Hej allesammen!

er dte muligt at få en online tæller som viser hvor mange der er på LIGE NU, og lige så snart der er en der logger af står der en mindre, ikke det med om han er "aktiv" i nogle minutter, kan man ikke lave det?

mvh. subit
Avatar billede schaefner Juniormester
16. juni 2003 - 23:13 #1
<?php 
// Indstillinger 
mysql_connect('localhost','brugernavn','kodeord'); 
mysql_select_db('database'); 
$ip = $_SERVER['REMOTE_ADDR']; 
$tid = date('Y-m-d H:i:s',(time()-600)); 

/* 
CREATE TABLE online ( 
  id int(11) NOT NULL auto_increment, 
  tid datetime NOT NULL default '0000-00-00 00:00:00', 
  ip varchar(50) NOT NULL default '', 
  PRIMARY KEY (id) 
) TYPE=MyISAM; 
*/ 

mysql_query("DELETE FROM online WHERE tid < '$tid'"); 

$tjek = mysql_query("SELECT COUNT(*) AS ialt FROM online WHERE ip='$ip'"); 
if (mysql_result($tjek,0) == 0) { 
  mysql_query("INSERT INTO online VALUES ('',now(),'$ip')"); 
} else { 
  mysql_query("UPDATE online SET tid=now() WHERE ip='$ip'"); 
} 

$online = mysql_query("SELECT COUNT(*) AS antal FROM online"); 
echo 'Der er lige nu '.mysql_result($online,0).' online'; 
?>
Avatar billede fangel Nybegynder
16. juni 2003 - 23:14 #2
hvis det skal være LIGE SÅ SNART, indebære dette jo at der skal være noget kontakt til klienten... dette kan laves på 2 måder

1) noget server-client snask (kræver egen server, eller uendeligt sødt webhotel)
2) noget onUnload, men dette bliver også noget snask!

så faktisk er der ikke teknisk muligt! i PHP i det mindste, og en acceptabel løsning

Morten
Avatar billede jakoba Nybegynder
16. juni 2003 - 23:26 #3
subit > nej. det kan man ikke. Problemet er at en grundlæggende regel er at det altid skal være klienten (browseren) der skal starte enhver overførsel af data. Det eneste serveren må gøre er at svare når den bliver spurgt. den må ikke starte noget selv.

Så hvis ikke brugeren specifikt fortæller "nu går jeg min vej" så har du ingen mulighed for at vide om han er gået, eller om han blot tager en pause for at hente en kop kaffe.
Avatar billede schaefner Juniormester
16. juni 2003 - 23:28 #4
min er bestemt heller ikke sikker, men du kan se den i aktion her:
http://schaefner.users.whitehat.dk/online.php
Avatar billede schaefner Juniormester
16. juni 2003 - 23:49 #5
Iøvrigt et svar hvis det kan bruges
Avatar billede 2-maz Nybegynder
17. juni 2003 - 00:59 #6
<?PHP
/* Tilslutter til databasen */
mysql_connect("localhost", "test", "test");
mysql_select_db("test");

/*
    Mysql Dump
   
    CREATE TABLE online_users (
      id int(11) NOT NULL auto_increment,
      ip varchar(255) NOT NULL default '',
      host varchar(255) NOT NULL default '',
      date int(11) NOT NULL default '0',
      browser varchar(255) NOT NULL default '',
      page varchar(255) NOT NULL default '',
      PRIMARY KEY  (id)
    ) TYPE=MyISAM;
*/
function ShowUsers() {
    $time          = explode(" ", microtime());
    $usersec        = (double)$time[1];
    mysql_query("DELETE FROM online_users WHERE date < $usersec -100");
    $countusers    = mysql_result(mysql_query("SELECT count(id) as total FROM online_users"), 0);
   
    print ('<table border="0" bgcolor="#000000" cellspacing="2">');
    print ('<tr><td bgcolor="#008000" COLSPAN="4"><b><font color="#ffffff">Users online: '.$countusers.'</font></b></td></tr>');
    print ('<tr>');
    print ('<td bgcolor="#FFFFFF"><b>Ip</b></td>');
    print ('<td bgcolor="#FFFFFF"><b>Host</b></td>');
    print ('<td bgcolor="#FFFFFF"><b>Browser</b></td>');
    print ('<td bgcolor="#FFFFFF"><b>Side</b></td>');
    print ('</tr>');
   
    $result = mysql_query("SELECT * FROM online_users");
    while ($row = mysql_fetch_array($result)) {
        print ('<tr>');
        print ('<td bgcolor="#FFFFFF"><small>'.$row['ip'].'</small></td>');
        print ('<td bgcolor="#FFFFFF"><small>'.$row['host'].'</small></td>');
        print ('<td bgcolor="#FFFFFF"><small>'.$row['browser'].'</small></td>');
        print ('<td bgcolor="#FFFFFF"><small>'.$row['page'].'</small></td>');
        print ('</tr>');
    }
    print ('</table>');
}

/* dette skal indsættes på alle undersider */
function InsertUser() {
   
    $ip            = $_SERVER['REMOTE_ADDR'];
    $host          = gethostbyaddr($ip);
    $browser        = $_SERVER['HTTP_USER_AGENT'];
    $page          = $_SERVER['PHP_SELF'];
    $time          = explode(" ", microtime());
    $usersec        = (double)$time[1];
    mysql_query("DELETE FROM online_users WHERE ip like '$ip'");
    mysql_query("INSERT INTO online_users (ip,host,date,browser,page) VALUES ('$ip','$host','$usersec','$browser','$page')");
}
InsertUser();
/* her til */

/* Denne linie viser en tabel med data om de online brugere */
showUsers();

/* Udskriver koden */
print ("<hr>");
show_source(__FILE__);
?>
Avatar billede 2-maz Nybegynder
18. juni 2003 - 19:32 #7
lidt respons`?
Avatar billede schaefner Juniormester
31. august 2003 - 01:18 #8
jaah, det ville da ikke skade ;)
Avatar billede schaefner Juniormester
01. oktober 2003 - 21:25 #9
det ville det faktisk stadig ikke
Avatar billede schaefner Juniormester
03. december 2004 - 15:24 #10
Heller ikke over et år efter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester