Problem mit User Online anzeige

Ich glaube ich hätte euch sagen sollen, das der Timestamp vorhanden ist? Also es geht alleine darum, dass das Script dne Timestamp ausliest und dann die User die innerhalb der 300 Sek. online sind, anzeigt.

Weil, ich bekomme selbst mit dem Codeschnipsel von Sephcom, immernoch den gleichen Fehler.

Edit der Timestamp sieht dann so aus: "1216396696"
 
Hallo zusammen,

ich wollte nur sagen das man sich den PHP-Kram auch ganz schenken kann falls der Zeitpunkt als TIMESTAMP in mySQL gespeichert ist:

Code:
SELECT name FROM p_user WHERE laston >= (UNIX_TIMESTAMP() - 300);

So hab ich das gemacht ;)
 
Ehrlich gesagt...nein xD
Weil wie gesagt, wenn du time() + 300 rechnest, verfälscht das das ganze Ergebnis

Ich habs mal ausprobiert, time() so ausgegeben und time() + 300
Bei Time+300 wurde sekündlich das DATUM geändert!
Was daran liegt, das time() so 'ne komisch formatierte Zahl ausgibt.

EDIT:
Übrigens bei mir t das alles wunderbar o.o
Das ganze arbeitet mit mehreren Scripten und einer Datenbank.
Beim Einloggen wird eine Variable auf TRUE gesetzt, "SESSION COUNT" zählt alle Tabelleneinträge, bei denen die Variable "logge
din" TRUE ist und gibt somit die Anzahl eingeloggter User an.
Eine while Schleife gibt die Benutzernamen aus.
(beispiel:
2 User Online:
-Hans
-Wurst)

Nach jedem erneuten seitenaufruf wird beim eingeloggten User in der Datenbank die variable "lastaction" aktualisiert (auf NOW() gestellt).

Ein weiteres Script prüft ob "lastaction" keinen größeren unterschied als 30 minuten zur momentanen uhrzeit aufweist, falls doch wird "loggedin" wieder auf 0 gesetzt, der User ist ausgeloggt
(Das letzte Script wird benötigt, falls sich leute nicht ausloggen, sondern einfach das Browserfenster schließen oder den PC ausschalten).

Jetzt wird noch was in der login.php benötigt:
Und zwar eine überprüfung der IP.
Sollte der User nämlich seine Session's löschen, so ist dennoch für 30min sein Account online, heißt > beim Einloggen die fehlermeldung "User bereits eingeloggt" also benötigen wir eine IP Überprüfung.
Ist die überprüfte IP ($_SERVER['REMOTE_ADDR'];) die gleiche, wie die, die beim Login in der Datenbank gespeichert wurde (muss also auchnoch in die Login.php), so kann man davon ausgehen > es ist der gleiche User = login erfolgreich! andererseits > andere Person = login ungültig!

Ehm...die ganzen PHP Codes dafür findest du im letzten beitrag von mir hier http://www.tutorials.de/forum/php/318951-user-online-count-etc.html

mfG
 
Zuletzt bearbeitet:
Ich poste mal einfach den kompletten Counter-Skript von mir:
PHP:
<?php
$sql = "SELECT
COUNT(*) as Anzahl
FROM
Online
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);

if($row['Anzahl'])
{
// Nur Datum Updaten
$sql = "UPDATE
Online
SET
Datum = NOW()
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'";
mysql_query($sql) OR die(mysql_error());
}
else 
{
// Neuer eintrag
$sql = "INSERT INTO Online
(IP, Datum)
VALUES
('".$_SERVER['REMOTE_ADDR']."', NOW())";
mysql_query($sql) OR die(mysql_error());
}
// alte Datensätze löschen
$sql = "DELETE FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 1 MINUTE) > Datum";  //Online Kadenz Zeit 1 Minute!
mysql_query($sql) OR die(mysql_error());
// Anzahl Ausgeben
$sql = "SELECT
COUNT(*) as Anzahl
FROM
Online";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);

//OUTPUT DER ABZAHL ALLER USER, DIE ON SIND
echo '<span id="online">User Online: '.$row['Anzahl'].'</span>';
?>
Wie man sieht werden die Zeitfragen aller DB intern geklärt ;)


Musste nur entweder die SQL-Statements an deine DB anpassen...
Oder du benutzt die selbe wie ich:
Code:
CREATE TABLE Online
(
    IP VARCHAR(15),
    Datum DATETIME
);

Ich glaub ich hatte das mal iwo aus nem Tutorial oder so... Is jedenfalls nich original von mir, hab mir das selber legal gemoppst ^^
 
Zuletzt bearbeitet:
Ist nett gemeint, aber die User Online hab ich schon in meinem Counter.

Ich möchte dagegen, das man die eingeloggten Member sofern sie Online sind auch "Online" gezeigt werden
 
Zurück