Kleines Problem mit Statistik Script

funnyzocker

Erfahrenes Mitglied
Hallo.
Ich möchte in mein Projekt nun mehr Statistiken über die Besucher "sammeln".

Damit ein Besucher aber nur alle 60 Minuten geloggt wird wollte ich das so lösen.
PHP:
$zeit = time();
$sperre = $zeit - 20;
$ip = $_SERVER["REMOTE_ADDR"];
$host = $_SERVER["REMOTE_HOST"];
$agent = $_SERVER["HTTP_USER_AGENT"];
$referer = $_SERVER["HTTP_REFERER"];
//Eintrag aus IP Liste Löschen wenn Reload abgeblaufen ist
mysql_query("DELETE FROM stat_ip WHERE zeit < $sperre AND ip = $ip");

$sql = mysql_query("SELECT id, ip, zeit FROM stat_ip where ip='$ip'");
if(mysql_num_rows($sql) < 1) {
    mysql_query("INSERT INTO stat_ip (ip, zeit)
                VALUES
                ('$ip', '$zeit')");
    mysql_query("INSERT INTO stat_daten (ip, zeit, host, referer, agent) 
                VALUES
                ('$ip', '$zeit', '$host', '$referer', '$agent')");
   }
else
{
echo"Sperre Aktiv";
}
Beim ersten aufruf klappt es ja ohne Probleme.
Aber selbst nach ablauf der 20 Sekunden (die in der Testphase eingestallt sind) kommt immer Sperre Aktiv. Also er löscht den Eintrag nicht.
 
ich verstehe noch nicht ganz dein Ziel des Scripts, sonst würd ich dir schon jetzt gern helfen. Aber was mir aufgefallen ist bzgl. deiner Variablen in den MySQL Strings...

PHP:
mysql_query("DELETE FROM stat_ip WHERE zeit < ".$sperre." AND ip = ".$ip);

Du solltest immer die Variablen vom restlichen String trennen. Trennen benutzt man die Anführungszeichen und zum Verbinden, der Punkt...
z.B. so "string".$variable."string_teil_2";

Wenn du noch genauer erklärst, was du machen willst, kann ich dir helfen! Kannst dich auch über ICQ melden (197060771)...

Grüße ausm Schwabenland
Hockeyfan
 
PHP:
//Eintrag aus IP Liste Löschen wenn Reload abgeblaufen ist
mysql_query("DELETE FROM stat_ip WHERE zeit < $sperre AND ip = $ip");

In dieser Zeile ist die Variable $ip nicht in ' gesetzt, daher wird der alte Eintrag wahrscheinlich nie gelöscht. Du könntest den WHERE-Teil auch komplett weglassen, dann kannst du aus der Anzahl der Einträge der Tabelle noch etwa abschätzen wieviele Leute in der letzten Stunde online waren. Außerdem wird die Tabelle sonst mit der Zeit recht groß werden, weil die Einträge ja nie weniger werden können, in jedem Aufruf wird es 0 oder 1 Eintrag mehr.
 
Mir ist gerade mal so der Gedanke gekommen das ich beim Löschen ja generell nur die gesammten Einträge löschen kann die aus der Reloadsperre raus sind. Ich muss das ja nicht noch mit der IP abgleichen.
So wird erstens die DB nicht zu voll und es erstpart einen unnötigen Schritt.

Und es klappt so wie ich es mir vorgestellt habe.

*Edit* Ja nun habe ich solange probiert und hier geschrieben das Papier das geschrieben hat was ich auch meinte :-)
 
Versuche die Daten aus Datenschutzgründen lieber anonymisiert oder zumindest synonoymisiert zu speichern.
 
Zurück