• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

logout

Status
Für weitere Antworten geschlossen.
ganz einfach machs nur über sessions außer wenn du wirklich wert drauf legst, das deine user sehen können wer online ist dann vielleicht noch mit ner kleinen spalte in der db die die letzte online zeit speichert und ob gerade online oder nicht mehr brauchst du nicht.

dann einfach nen script was alle auf offline setzt die noch als online in der db stehen aber seid 5 minuten nix mehr gemacht haben und gut ^^
 
Und zu dem Skript welches Slibbo angesprochen hat:

PHP:
<?php
    // Wähle alle User ID's aus, wo die letzte Aktion 5 Minuten zurückliegt und der Online Status noch auf 1 steht
    $sql = "SELECT id FROM users WHERE UNIX_TIMESTAMP() - `timestamp` > 300 AND online_status = 1;";
    $result = mysql_query($sql) or die(mysql_error());
    // Wenn es User gibt die online sind aber 5 Minuten nix gemacht haben, dann...
    if(mysql_num_rows($result) > 0) {
        while($in = mysql_fetch_array($result)) {
            // ...setze den Online Status auf 0...
            $sql = "UPDATE users SET online_status = 0 WHERE id = ".$in['id'].";";
            $result = mysql_query($sql) or die(mysql_error());
        }
    // ...andernfalls...
    } else {
        // ...aktualisiere den Zeitstempel für User XY
        $sql = "UPDATE users SET `timestamp` = UNIX_TIMESTAMP() WHERE id = ".mysql_real_escape_string($_SESSION['u_id']).";";
        $result = mysql_query($sql) or die(mysql_error());
    }
?>
Der Code ist nicht durchgetestet, sollte aber funktionieren. Es reicht lediglich 1 aktiver User um den Onlinestatus der noch als Online angezeigten User zu ändern. Wenn du das ganze noch in eine Funktion pakst und diese bei jedem Seitenaufruf einmal durchlaufen lässt, sollten die Onlineanzeigen auch relativ zuverlässig sein.

MfG

NewLord
 
Da du ja eh ausliest wer noch online ist und nix mach kannst du ja auch gleich alle auf offline setzen die die bedingungen nicht erfüllen.

und deine else struktur ist sehr komisch, da du ja bei JEDEM aufrufdie onlinezeit aktuallisieren musst.

so komme ich zu volgendem ergebniss

PHP:
<?php

$sql = "UPDATE users SET online_status = 0 WHERE UNIX_TIMESTAMP() - `timestamp` > 300;";
$result = mysql_query($sql) or die(mysql_error());

$sql = "UPDATE users SET `timestamp` = UNIX_TIMESTAMP() WHERE id = '".mysql_real_escape_string($_SESSION['uID'])."';";
$result = mysql_query($sql) or die(mysql_error());

?>

MFG Miah ;)
 
das ist hirnrissig. warum gehst du nicht beim auslesen schon über den timestamp. man muss doch nicht jedesmal noch in der tabelle rum schreiben um den wert dann auszulesen.
 
Hey mein Code ist ne "Schnell-Mal-Was-Gecodet" Lösung und nix hochwertiges bzw. genau durchdachtes ;) Sicher geht es auch einfacher, zb. so wie Slibbo es geschrieben hat. Allerdings bräuchtest du für den Query für das Updaten des Timestamps eh ein if-konstrukt, denn zb. ein Gast welcher die Onlineanzeige sieht aber nicht eingeloggt ist, hat demzufolge auch keine Session uID und es würde zu nem SQL-Fehler kommen, wenn ein Gast versucht diese Abfrage auszuführen.

MfG

NewLord
 
gäste kann man nur anhand der ip binden, das vorhandene konstrukt ist mehr als umständlich und performant. ich schreibe nur in tabellen, in denen ich wirklich schreiben muss.


Hey mein Code ist ne "Schnell-Mal-Was-Gecodet" Lösung und nix hochwertiges bzw. genau durchdachtes
genau deshalb haben php entwickler einen so schlechten ruf -.-
 
tut mir leid wegen dem if ich bin von internem und externem userhandling ausgegangen und dabei gehe ich davon aus das es einfache gäste z.b. nicht interessiert wer gerade online ist, und solange kein user online ist muss da auch nix auf offline gesetzt werden. ;)
 
Zuletzt bearbeitet von einem Moderator:
joo, es hat geklappt. hier mein code. vllt findet ihr noch fehler:
PHP:
<?php
session_start();
var_dump($_REQUEST);
	mysql_connect("localhost", "root");
	mysql_select_db("test");

	?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<div id="bg">
<div id="head">
<head>
<link href="http://localhost/listgame/joda/style.css" type="text/css"
	rel="stylesheet">

<title>Listgame</title>

</div>
</head>
<body>
	<div id="body">
		<h1>Willkommen bei Listgame!</h1>
		<div id="text">
		<p>
		<?php
				if($_SESSION["username"] != "")
				{
		session_destroy();
		echo "Du hast dich erfolgreich ausgeloggt.";
				}
		else
		echo "Fehler!" . $_SESSION["username"];
		?>
		<br />
		<br />
		<a href="index.php">Zurück zur Startseite.</a>
		</p>
	    </div>
		<br />
		<br />
		<a href="login.php"><input type="button" value="Log in" /></a>
		<a href="registerform.php"><input type="button" value="Registrieren" /></a>
		<?php
		if($_SESSION["username"] != "")
		{
		?>
		<a href="log_out.php"><input type="button" value="Log out" /></a>
		<?php
		}
		?>
</div>
	</body>
</html>
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben