Wer ist wo online?

skate-rock

Grünschnabel
Hallo!

Ich wollte mich mal erkundigen ob jmd. weiss wo es ein Script gibt, mit dem ich anzeigen lassen kann, wo gerade User unterwegs sind. Also wenn sich jmd. z.B. im Ordner /tutorials/index.html aufhält, soll dieses Script anzeigen:

Tutorials: 1 User

usw...

Gibts das? Wenn ja wo?
 
ich hab sowas schon mal gemacht. Das Script ist aber total alt und schlecht, aber so ungefähr funktioniert's.

PHP:
$nowdate = date(YmdHis);
$userip = getenv("REMOTE_ADDR");
if($_SESSION[un])
{
  $lastinsert = mysql_query("UPDATE forummembers SET lastvisit  = '$nowdate' , online = 'true'
                 WHERE name = '$_SESSION[un]'");
}
  $xc = mysql_query("SELECT * FROM forummembers");
  while($row = mysql_fetch_object($xc))
  {
  $delldate = $nowdate  - $row->lastvisit;
  if($delldate > 300)
  {
    $lastinsertdel = mysql_query("UPDATE forummembers SET online = 'false' WHERE name = '$row->name'");
  }
  }
$row = mysql_fetch_object(mysql_query("SELECT * FROM forumonline WHERE ip = '$userip'"));
  if($row->ip == $userip or $_SESSION[un])
  {
    echo "";
  }
  else
  {
    $onlinequery = mysql_query("INSERT INTO forumonline (ip,date) VALUES ('$userip','$nowdate')");
  }
  $deldate = $nowdate - $row->date;
  if($deldate > 300)
  {
    $onlinedelq = mysql_query("DELETE FROM forumonline WHERE date = '$row->date'");
  }
 
Ich versuch mich mal, ich poste gleich mein script.

Edit:
Ich hab gute Laune. Schenk ich dir zu Weihnachten. *gg*

So haben fertig:

Die counter.php:
Einfach abspeichern.
PHP:
<?
  include("config.php");
  ## Einstellungen
  $timestamp_new = time();
  $sekunden_tag = 60 * 60 * 24;
  $timestamp_ges = $timestamp_new - $sekunden_tag;
  $datum_new = date("Y-m-d", $timestamp_new);
  $datum_ges = date("Y-m-d", $timestamp_ges);
  
  ## User Eintragen in die Tabelle oder Eintrag erneueren
  $sql_inuser = "SELECT * FROM $counter_info[perfix]useronline WHERE (ip = '$REMOTE_ADDR')";
  $query_inuser = @mysql_query ($sql_inuser, $connID);
  if (mysql_num_rows ($query_inuser) > 0) {
    $sql_update = "UPDATE $counter_info[perfix]useronline SET
                   timestamp = '$timestamp_new',
                   seite = '$seitenname'
                   WHERE (ip = '$REMOTE_ADDR')";
    @mysql_query ($sql_update, $connID);
  } else {
    $sql_insert = "INSERT INTO $counter_info[perfix]useronline SET
                   ip = '$REMOTE_ADDR',
                   seite = '$seitenname'
                   timestamp = '$timestamp_new'";
    @mysql_query ($sql_insert, $connID);
    ## EIntrag in die INsgesammt Tabelle machen
    $sql_ins_select = "SELECT * FROM $counter_info[perfix]insgesammt WHERE (datum = '$datum_new')";
    $query_ins_select = @mysql_query ($sql_ins_select, $connID);
    if (mysql_num_rows ($query_ins_select) == 1) {
      $result_ins_select =  @mysql_fetch_array($query_ins_select);
      $anzahl_new = $result_ins_select["anzahl"] + 1;
      $sql_ins_update = "UPDATE $counter_info[perfix]insgesammt SET
                         anzahl = '$anzahl_new'
                         WHERE (datum = '$datum_new')";
      @mysql_query ($sql_ins_update, $connID);
    } else {
      $sql_ins_insert = "INSERT INTO $counter_info[perfix]insgesammt SET
                         datum = '$datum_new',
                         anzahl = '1'";
      @mysql_query ($sql_ins_insert, $connID);
    }
  }
  
  ## Abgelaufende User aus der Datenbank loschen.
  $timestamp_abgelaufen = $timestamp_new - $counter_info["idletime"];
  $sql_delete = "DELETE FROM $counter_info[perfix]useronline WHERE (timestamp < '$timestamp_abgelaufen')";
  @mysql_query ($sql_delete, $connID);
?>
Code um die counter.php Datei aufzurufen:
SEITENNAME Durch den Seitennamen ersetzen und die Datei bei jeder neuen Seite laden lassen.
PHP:
<? $seitenname = "SEITENNAME"; include("counter_ohne.php"); ?>
counter_anzeige.php:
PHP:
<?
include("config.php");
  ## Auslesen vom Counterstand
  #Online
  $sql_auslesen_on = "SELECT COUNT(*) AS anzahl FROM $counter_info[perfix]useronline";
  $query_auslesen_on = @mysql_query ($sql_auslesen_on, $connID);
  $result_auslesen_on = @mysql_fetch_array($query_auslesen_on);
  $user_online = $result_auslesen_on["anzahl"];
  #Insgesammt
  $sql_auslesen_ins = "SELECT * FROM $counter_info[perfix]insgesammt";
  $query_auslesen_ins = @mysql_query ($sql_auslesen_ins, $connID);
  $user_insgesammt = 0;
  $first = 0;
  while($result_auslesen_ins = @mysql_fetch_array($query_auslesen_ins)) {
    if ($result_auslesen_ins["datum"] == $datum_new) {
      $user_heute = $result_auslesen_ins["anzahl"];
    } elseif ($result_auslesen_ins["datum"] == $datum_ges) {
      $user_gestern = $result_auslesen_ins["anzahl"];
    }
    $user_insgesammt = $user_insgesammt + $result_auslesen_ins["anzahl"];
    if ($first == 0) {
      $datum_start = $result_auslesen_ins["datum"];
      $first = 1;
    }
  }
  if($user_heute == "") $user_heute = 0;
  if($user_gestern == "") $user_gestern = 0;
  $datum_array = explode("-",$datum_start);
  $datum_start = "$datum_array[2].$datum_array[1].$datum_array[0]";
  
  ##Ausgabe vom Counter
?>
User Online: <b><?=$user_online?></b><br />
User Heute: <b><?=$user_heute?></b><br />
User Gestern: <b><?=$user_gestern?></b><br />
User Insgesammt: <b><?=$user_insgesammt?></b><br />
Seit dem:<br />
<b><?=$datum_start?></b>
Um sie einzubinden bitte das hier Benutzen:
PHP:
<? include("counter_anzeige.php"); ?>
status.php:
PHP:
<?
  $seitenname = "Statusseite"; include("counter.php");
  $sql = "SELECT * FROM $counter_info[perfix]useronline ORDER BY 'seite'";
  $query = @mysql_query ($sql, $connID);
  if (mysql_num_rows ($query_inuser) > 0) {
    $seiten = array();
    $seite_new = "";
    $anzahl = array();
    while($result =  @mysql_fetch_array($query)) {
      if($seite_new != $result["seite"]) {
        array_push ($seiten, $result["seite"]);
        $anzahl["$result[seite]"] = 1;
      } else {
        $anzahl["$result[seite]"] = $anzahl["$result[seite]"] + 1;
      }
    }
    echo("<table>
      <tr>
        <th>Seitenname:</th>
        <th>Anzahl der User:</th>
      </tr>");
    foreach($seiten AS $einzeln) {
      echo("<tr>
        <td>$einzeln</td>
        <td>$anzahl[$einzeln]</td>
      </tr>");
    }
  } else {
    echo("Es ist keiner Online. Geht das?");
  }
?>
config.php:
PHP:
<?

## Datnbank
$db_host = ""; // Datenbank Server
$db_user = ""; // Datenbank Benutzername
$db_pw = ""; // Datenbank BenutzerPasswort
$db_name = ""; // DatenbankName
$connID = @mysql_connect ($db_host, $db_user, $db_pw);
@mysql_select_db ($db_name, $connID);

## Einstellungen zum Counter
$counter_info["idletime"] = 300;
$counter_info["perfix"] = "game_counter_";

?>
SQL Befehl:
PHP:
CREATE TABLE `game_counter_insgesammt` (
  `id` int(11) NOT NULL auto_increment,
  `datum` date NOT NULL default '0000-00-00',
  `anzahl` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

CREATE TABLE `game_counter_useronline` (
  `id` int(11) NOT NULL auto_increment,
  `ip` varchar(15) NOT NULL default '',
  `timestamp` int(20) NOT NULL default '0',
  `seite` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;




Bei Problemen kannst du dich per ICQ melden: 150550386 oder hier im Forum.

Gruß
 
naja da sind noch viele fehler drin( naja besser gesagt waas ich anderes machen würde), den script hab ich aus meinem Inline Counter gabaut.

Gruß
 
Hallo,

das Skript ist ja soweit echt super nur es funktioniert nicht ganz. Und zwar wird nichts in die Tabelle xxx_useronline eingetragen. Wieso?
 
Zurück