PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Counter -> For the muff.



Tessio
27.11.2006, 16:43
Huhu.
Also : Ich würde mir gerne einen Counten (mit Hilfe von PHP und MySQL) schreiben, der einem anzeigt, wieviele Besucher in den letzten drei (ist egal, von mir aus auch zwei oder eine Minute, wir halt als "Besucher im Netzwerk : " angezeigt) Minuten auf den Seiten waren, auf denen dieses Script eingebau ist.
Mein Script sieht atm so aus :


<?php
$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
$timeatm = time();

$sql = "SELECT * FROM `netzwerkcounter` WHERE `kennzeichnung` = '".$ip.$host."'";
$query = mysql_query($sql);
$rows = mysql_num_rows($query);

if ($rows != 0) {

$sql = "UPDATE `netzwerkcounter` SET `zeit` = '".$timeatm."' WHERE `kennzeichnung` = '".$ip.$host."';";

mysql_query($sql);
} else {
$sql = "INSERT INTO `netzwerkcounter` (`kennzeichnung`,`zeit`) VALUES ('".$ip.$host."','".$timeatm."');";

mysql_query($sql);
}

$timeatm = time();
$timeatm = $timeatm - 180;

$sql = "SELECT * FROM `netzwerkcounter` WHERE `zeit` >= '".$timeatm."'";
$query = mysql_query($sql);
$rows = mysql_num_rows($query);

$online = $rows;

?>

Die Tabelle "netzwerkcounter" hat die Spalten ID, zeit und kennzeichnung.
Das soll halt alles bewirken, dass nur die Gäste ausgelesen werden, die in den letzten drei Minuten in die Datenbank eingetragen wurden und durch die IP und Hostmaskspeicherung kein Gast zweimal gezählt wird.
Jetzt habe ich folgendes Problem : Der Inhalt von der Spalte kennzeichnung ist immer die selbe, deshalb wird immer nur ein User online gezählt.
Die IP sag ich hier mal nicht ist jedenfalls immer dieselbe und die Hostmask ist immer die Adresse vom Server (ich habe keinen eigenen, nur Webspace auf dem Server, also kann ich keine Konfigurationen am Server vornehmen).

Jetzt hatte NPC mir gesagt, dass er mir "Morgen" (das war vor ca. ner Woche) ein Script schreiben wollte.
Er hat aber nie Zeit und da ich keine Lust habe, dafür Wochen hinter ihm her zu laufen, frage ich hier, ob mir irgendwer die Lösung schreiben kann.
Gehen muss es ja, denn das vBulletin, das auf meinem Webspace läuft, kann ja auch IP und Hostmask ermitteln.

MfG, Kev

drunken monkey
27.11.2006, 18:38
Einen Versuch wäre es wert, "$_SERVER["HTTP_X_REMOTECLIENT_IP"]" statt "$_SERVER["REMOTE_ADDR"]" zu verwenden. Manche Server deaktivieren nämlich, aus Gründen, die mir nicht bekannt sind, letzteres. Ersteres sollte aber dennoch funktionieren.

Wie gesagt, einen Versuch ist es wert. Zumindest eher, als NPC hinterherzurennen - selbst für deutlich einfachere Sachen kann man das monatelang machen...-_-

Tessio
27.11.2006, 19:06
Hab nach deinem Rat geschrieben :

$ip = $_SERVER['HTTP_X_REMOTECLIENT_IP'];
$host = gethostbyaddr($_SERVER['HTTP_X_REMOTECLIENT_IP']);
Funktioniert leider immer noch nicht.
Diesmal wird in der Spalte "kennzeichnung" gar nichts gespeichert .o.

Manni
27.11.2006, 19:23
Ich würde dir empfehlen, nicht nur die Benutzer der letzten drei Minuten zu zählen, das sind sonst eventuell ein bisschen wenige.

Außerdem kannst du ein paar Rechnungen auch vereinfachen:

$timeatm = time();
$timeatm = $timeatm - 180;
wird zu

$timeatm = time() - 180;
und

$rows = mysql_num_rows($query);
$online = $rows;
zu

$online = mysql_num_rows($query);

Außerdem könntest du die Anzahl auch direkt auslesen:

$sql = "SELECT * FROM `netzwerkcounter` WHERE `zeit` >= '".$timeatm."'";
$query = mysql_query($sql);
$rows = mysql_num_rows($query);

$online = $rows;
wird zu

$sql = "SELECT COUNT(*) AS anzahl FROM `netzwerkcounter` WHERE `zeit` >= '".$timeatm."'";
$online = mysql_result(mysql_query($sql), 0, 0);

Tessio
27.11.2006, 19:27
Danke für deine Vereinfachungen aber ich möchte jetzt doch gerne wissen, wie es auch insgesamt funktioniert ;)


Ich würde dir empfehlen, nicht nur die Benutzer der letzten drei Minuten zu zählen, das sind sonst eventuell ein bisschen wenige.
Okay, ich denke mal ich erhöhe auf ~15.