"Wieviele sind Online" Anzeige

Paspirgilis

Weißer Powerranger
Hi
Ich wollte mir eine Anzeige bauen wieviele gerade meine page bedgutachten.
dafür wollte ich in der Datenbank nur ein Feld benutzen.
Ich hab mir also diesen Syntax für das Feld ausgedacht:
"IP:time,IP:time,IP:time"
aber irgendwie haut das alles nicht richtig hin und ich denke ich versage grad an den basics von php deswegen steht es in diesem forum.
Eine Lösung auf mein Problem und vieleicht eine Erklärung wie man soetwas Professioneller gemacht hätte wäre schön.
hier mein code:

PHP:
$onlineDb = mysql_fetch_array(mysql_query('SELECT `mypage`.`pagestats`.`value` FROM `mypage`.`pagestats` WHERE `mypage`.`pagestats`.`desc` = "online"'));
$onlineDb = $onlineDb['value'];
$onlineDbNew = $onlineDb['value'];

$onlinePairs = split(",", $onlineDb);
for($i=0 ; $i < count($onlinePairs) ; $i++)
	{
	$osp = split(":", $onlinePairs);
	if($osp > time()+11)
		$onlineDbNew = str_replace("," . $osp[0] . ":" . $osp[1], "", $onlineDbNew);
	}
	
$onlineCount = split(":", $onlineDbNew);
$online = 0;
for($i=0 ; $i < count($onlineCount) ; $i++)
	$online++;

if(empty($onlineDbNew))
	$onlineDbNewString = $_SERVER['REMOTE_ADDR'] . ':' . time();
else
	$onlineDbNewString = $onlineDbNew . ',' . $_SERVER['REMOTE_ADDR'] . ':' . time();

mysql_query('UPDATE `mypage`.`pagestats` SET `mypage`.`pagestats`.`value` = "' . $onlineDbNewString . '" WHERE `mypage`.`pagestats`.`desc` = "online"');

und die tabelle sieht so aus
desc value
hits 111
mostOnline 0
online 9,93.197.202.77:

Hoffe man kann alles erkenne und man erkennt auch den Müll den er in online reinschreibt :D
 
Hi,

Professioneller:

Vergiss das mit dem einen Feld und schreib das ordentlich in die Datenbank.
Dann sparst du dir das ganze gescripte und erledigst das mit einer einzigen Datenbankabfrage.
 
Nur so als kleine Anregung.
Wenn der User auf deine Seite kommt, lässt du dir in die Datenbank seine IP speichern und seine Zeit, das Script überprüft dann, z.B. beim Seitenwechsel ob der User schon geloggt ist und setzt die Zeit dann rauf. Wenn das Script jetzt erneut aufgerufen wird, dann überprüft diese ob die Zeiten alle noch so passen und wenn eine IP mit einer Zeit von z.B. vor 5 min das letzte Mal gesehn wurde, wird die IP aus der Datenbank geworfen.
Du musst jetzt nur noch mit dem Script auszählen wieviel Datensätze in der Tabelle sind und fertig.
 
hmm, schade ich dachte ich könnte mir ne tabelle sparen xD.
Dann werd ich das eben in ner extra Tabelle machen.

MFG
Mark Paspirgilis

PS: hatte ich mir schon gedacht das diese Antwort kommen würde :/
 
Es ist die sauberste und beste Lösung, alles andere wäre nichts Halbes und nichts Ganzes ;).

Vergess nicht den Thread auf erledigt zu setzen wenn du keine Fragen mehr hast.
 
Zurück