Hi
Ich habe ein Code Schnipsel umgeformt was anzeigt weviel User auf meine Seite online sind.
Ich hab das ein bissel umgeschrieben.
So das nur angemeldete User bei mein kleines cms als online angezeigt. Also keine Gäste, nur registrierte user.
Folgendes ist dabei rausgekommen:
PHP-Code:
$online_time=600; // Zeit für wie lange ein User als online gezählt werden
// soll (in sec - 600 = 10min)
//neuen besucher registrieren (mit ip und zeit)
function insert_new(){
global $conn;
global $pid;
mysql_query("INSERT INTO users (ip, lastact) VALUES ('".$_SERVER[REMOTE_ADDR]."', '".time()."') WHERE ID='$pid'");
$query=mysql_query("SELECT * FROM counter_count");
$count=mysql_fetch_object($query);
$count_query=mysql_query("UPDATE counter_count SET count='".($count->count+1)."'");
}
//besucherzahl ansehen
function see(){
global $conn;
$query=mysql_query("SELECT * FROM counter_count");
$see=mysql_fetch_object($query);
echo $see->count;
}
//checken, ob der aktuelle besuche mit seiner ip schon registriert ist.
//wenn nicht, dann wird funktion insert_new() aufgerufen, welche ihn registriert
function check(){
global $conn;
$query=mysql_query("SELECT * FROM users WHERE ip='".$_SERVER[REMOTE_ADDR]."'");
$data=mysql_fetch_object($query);
if(!$data->ip){
insert_new();
}
}
//hier wird die onlinezeit des aktuellen besuchers aktualsiert, damit die
//online anzeige immer up to date ist
function update(){
global $conn;
mysql_query("UPDATE users SET lastact='".time()."' WHERE ip='".$_SERVER[REMOTE_ADDR]."'");
}
//mit dieser funktion wird die anzahl der aktuell als online zählenden user
//angezeigt
function online(){
global $conn;
$query=mysql_query("SELECT * FROM users WHERE lastact=".(time()-$online_time));
if($query){
$online=mysql_num_rows($query);
}
if($online < 1){ $online=1; }
echo $online;
}
Für die MySQL Datenbank hab ich folgende Zeilen genommen:
PHP-Code:
CREATE TABLE counter_count (
id int(11) NOT NULL auto_increment,
count int(10) NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;
// Dann noch zwei weitere zeilen in die Tabelle users eingefügt und zwar folgende:
ip varchar(20) NOT NULL default '',
lastact varchar(20) NOT NULL default ''
Ausgeben tu ich das wie folgt:
PHP-Code:
check();
update();
echo "besucher";
see();
echo "
online:";
online();
Aber das will alles nicht so richtig funktionieren.
geht ich auf die Seite steht da immer folgendes:
besucher online:1
An sich ja logisch... nur steht da immer das da nur ein User online ist, obwohl es mehr sein müssten.
Und dann gib es auch noch Sachen mit der Datenbank.
Die Spalten
ip und
lastact in der Tabelle users ist überall immer leer.
Und auch in der tabelle
counter_count hat 0 Zeilen
Kann da wer die Fehler im Script entdeckte :|
Achja die varible $pid die abgefragt wird, ist die UserID die überall immer ermittelt wird.
und das $conn besteht aus diesen zeilen:
PHP-Code:
$conn=mysql_connect($db_host,$db_user,$db_passwort);
mysql_select_db($db,$conn);
Ps.: Rechtschreibfehler ;)