Useronline (<-> UserSystem v.3)
UserOnline Tutorial => UserSystemDa viele schon danach gefragt haben will ich dies nun mal erklären :)
Dieses Tutorial hängt mit den User-System Tutorials zusammen!
Auf jedenfall benötigen wir eine weitere MySQL Tabelle die dieselben Connections wie die alte Tabelle hat!
CREATE TABLE `my_useronline` (
`zeit` int(15) NOT NULL default '0',
`ip` varchar(15) NOT NULL default '',
`username` varchar(250) NOT NULL default '',
`userid` int(11) NOT NULL default '0',
`where` varchar(250) NOT NULL default '',
PRIMARY KEY (`zeit`)
)
Nun mal zum Part I das die User überprüft und einspeichert:
useronline.php Part I
<?php
$zeit = time();
$loeschzeit = $zeit-($timeout*60);
$ip = getenv(REMOTE_ADDR);
$where = $PHP_SELF;
$db_table = "my_useronline";
//Username Configuration
if(empty($_COOKIE['username']) && empty($_COOKIE['userid'])) {
$username = "-";
$userid = "-";
}
//Hier sollte zum MySQL Connected werden!
@mysql_select_db($db_database,$handler);
$check = @mysql_query("SELECT DISTINCT ip FROM $db_table",$handler);
while($row = mysql_fetch_array($check)) {
if($row[ip] == $ip) {
$result = @mysql_query("DELETE FROM $db_table WHERE ip='$del[ip]'",$handler);
}
}
//Database-Commands
$result = @mysql_query("INSERT INTO $db_table VALUES ('$zeit', '$ip', '$username', '$userid', '$where')",$handler);
$result = @mysql_query("DELETE FROM $db_table WHERE zeit<'$loeschzeit'",$handler);
$result = @mysql_query("SELECT DISTINCT ip FROM $db_table",$handler);
Zuerst weisen wir den Hauptvariablen unseres Scriptes mal einige Werte zu.
$zeit ... Die Variable bekommt den Unix Wert zugewiesen
$loeschzeit ... Hier wird vom Unix Wert eine Minute (60 Sekunden) abgezogen. Das ergibt dann den TimeOut / Löschzeit.
$ip ... Die IP des Users.
$where ... $PHP_SELF gibt die aktuelle Seite des jeweiligen Users an.
Außerdem geben wir noch der Variable $db_table den Wert für die UserOnline Tabelle zu.
Nun kommt der Teil der speziell auch die anderen UserSystem Tutorials anspricht:
Es wird überprüft ob der User eingeloggt ist oder nicht, anhand der Cookies. Wenn nun ein User nicht eingeloggt ist, wird ihm als Name & ID einfach das Zeichen "-"zugewiesen.
Danach wird mit MySQL connected und dann wird die Tabelle nach einem Eintrag durchforstet der exakt die gleiche IP des Users enthält.
Nun machen wir eine Weilschleife die alle Ergebnisse ausliesst und schaut ob die aktuelle IP gleich der in der Tabelle ist. Stimmt dies, so wird diese gelöscht.
Danach kommen die Hauptcommandos, die bei Fehlfunktion dank @ untedrückt werden.
Beim ersten wird immer der eintrag in die tabelle getätigt. Hier wird die Zeit, die IP der Username, die UserID und die Location eingefügt.
Bei der zweiten Zeile wird alles gelöscht das sich schon im TimeOut befindet. So können Reststücke von alten Usern entfernt werden.
Und beim dritten werden zu guter letzt alle Einträge ausgelesen.
Nun kommt der zweite Teil des Scripts :
useronline.php Part II
$anzahl_user = @mysql_num_rows($result);
$result2 = @mysql_query("SELECT DISTINCT * FROM $db_table WHERE username!='-' ORDER by username", $handler);
$anzahl_members = @mysql_num_rows($result2);
####
echo "<a href="user_online.php">";
if($anzahl_members == 1) {
echo $anzahl_members." davon online</a><br>";
}
elseif($anzahl_members == 0) {
echo "0 davon online</a><br>";
}
else {
echo $anzahl_members." davon online</a><br>";
}
echo "<a href="user_online.php">";
$gaeste = $anzahl_user - $anzahl_members;
if($gaeste == 1) {
echo "1 Gast online";
}
elseif($gaeste == 0) {
echo "0 Gäste online";
}
else {
echo $gaeste." Gäste online";
}
echo "</a>";
####
@mysql_close();
?>
Zuerst wird mal die Anzahl anhand MySQL_num_rows (speichert die Anzahl aller Ergebnise als Integer ein) in $anzahl_user eingespeichert.
Bei der nächsten Zeile verwenden wir nun eine neue Variable und diese holt uns nun aus der Tabelle alle Zeilen wo nicht "-" (also alle Zeilen die nicht ein Gast sind) steht.
Zustätzlich sortieren wir nach dem Namen. Danach speichern wir wieder das Ergebnis in $anzahl_members.
Der Rest ist nur mehr Formsache, die ansich jeder hinbekommen sollte bzw. verstehen sollte. Also hier wird nur mehr die jeweilige Anzahl der Onliner ausgegeben.
Zustzälich: Wem fad is bzw. wer anzeigen möchte wer & wo online ist, der kann ganz einfach nun die Werte aus der Tabelle auslesen.
Wenn ein User sich auf index.php befindet, wird dies eingespeichert und beim "Wer ist wo?" Script könnte man das mit einer IF - Abfrage oder Case Abfrage bearbeiten indem man z.B: schreibt:
if($row[where] == "/index.php") echo "Auf der Hauptseite";
usw.
Das wäre nur ein Lösungvorschlag, natürlich gibt es noch viele verschiedene Möglichkeiten dies zu lösen.
Also probiertsas aus, wenns Probleme gibt, steht euch das Forum jederzeit zur Verfügung! ;)
(c) by r0ck5tar / rh 2003

Kommentare
geilo *sabber*
jo ist super, aber hat die Variable $handler zu bedeuten die in den meisten abfragen drin ist?
dort wo "//hier soll zur mysql connected werden" steht kommt dann hin "$handler = mysql_connect("host","username","pw");"
<br>das glaub ich halt
hm das würd glaub ich auch ohne mysql gehen
Danke @blackfeet, werde es probieren :)
Öhm dumme Frage:
<br>Wenn es mit dem LogIn Script zusammen hängt und ich mich dann einlogge dann zeigt das ding aber an das ich ein Gast bin
<br>
kannste mir mal die ganzen datein die du hast als .zip geben? dann mache ich dirs so das es geht ;)
ähm kannst du das vielleicht nochmal deutlicher mit dem: 1 gast is: auf der hauptseite! erklären?
Da steht: "@mysql_select_db($db_database,$handler);" aber muss ich die variablen $db_database und $handler nicht vorher überhupt mal angeben? wenn nicht: WARUM?!
jo genau, bei mir auch. Weil dort steht dann 0 gäste online obwohl 3 on sind
Aiso, bei mir gehts. Man muss $handler (wie blackfeet bereits gepostet hat) und $db_database deklarieren, also:
<br>$handler = mysql_connect("locahost","root","pw");
<br>$db_database = "Name der Datenbank";
<br>man mus überprüfen ob man in seinen cookies wirklich "username" ausgibt (denn von den anderen beiden usersystemtutorials her steht nur name drin), und man muss bei den echos unten wieder ein paar " in ´ umtauschen. So funzts bei mir *glücklichbin*
BEi mir kommt immer nen fehler weil der array falsch aufgebaut is oder so ??
sry aber n anständiges usersystem hat ne eigene klasse ;-)