Funktioniert der Counter richtig?

Vitalis

Erfahrenes Mitglied
Hi Ihr!

Jetzt hab ich auch mal eine kleine Frage. Es geht um ein Counter-Script mit Reloadsperre. Ich habe zum größten Teil das Tutorial von |[Kab00m]| hier übernommen. Danke Dir dafür! Davor hatte ich auch schon einen eigenen Counter aber ich habe ihn viel zu umständlich gecoded. :)

Okay, was ich gerne wissen würde..
Laut Counter haben wir über 100 Besucher pro Tag und ich bin recht skeptisch, weiß nicht ob ich ihm vertrauen kann. :)
Könntet Ihr bitte schauen, ob sich da nicht irgendwo ein kleiner Fehler eingeschlichen hat, der das Ergebnis verfälscht?

Es gibt zwei Tabellen. In eine kommen die Hits (Counterhits), in die andere Daten wie ip und zeit. Hier der Code:

PHP:
<?php

$ip=getenv("REMOTE_ADDR");

$link = mysql_connect("server","username","passwort");
mysql_select_db("dbname",$link);

$ergebnis = mysql_query("SELECT * FROM counterdaten WHERE ip='$ip'");
$anzahl = mysql_num_rows($ergebnis);

$zeit = time();
$del = $zeit - 36000;
mysql_query("DELETE FROM counterdaten WHERE zeit < $del");

if ($anzahl < 1) {
    mysql_query("UPDATE counterhits SET hits=hits+1");
    mysql_query("INSERT INTO counterdaten (zeit, ip) values ('$zeit', '$ip')");
}

$ergebnis = mysql_query("SELECT * FROM counterhits");
$row = mysql_fetch_array($ergebnis);

mysql_close($link);

print $row["hits"];

?>

Schau Euch das bitte an und sagt mir jede Auffälligkeit. Ich will sicher sein, daß alles passt :)
Danke im Voraus!


Gruß,
Vitalis
 
Zuletzt bearbeitet:
Habe leider nichts gefunden was das Ergebnis verfälschen könnte.

Allerdings würde ich die Abgelaufenen IP-Speicherungen vor der if Anweisung setzen, wenn jemand schon über der Sperrungszeit hinaus ist wird er sonst nicht gezählt und hinterher erst gelöscht.

Und die Zeit wird nur in der if Anweisung gesetzt, wenn er allerdings schon vorhanden ist, hast du keine Variable $zeit gesetzt zum löschen der Einträge. Ich weiß nicht was dann in $zeit steht.
 
Zuletzt bearbeitet:
"Habe leider nichts gefunden...." < das ist doch gut :)

Ok ich hab's oben editiert. Hast recht, so ist es sinnvoller.
Hm, und sonst... ?
 
an dem Script selbst seh ich nix falsches.

hätte aber evtl. noch ne Idee, was schief laufen könnte:

der Begriff "Timestamp" sind in PHP und MySQL nicht das Gleiche.
Wenn die Spalte 'zeit' in der MySQL-Tabelle 'counterdaten' vom Typ "Timestamp" ist könnte dies evtl. das Verhalten erklären. (bin mir nicht sicher, aber ein Timestamp in PHP hat glaub ich 14 Stellen, in MySQL nur 10 oder so)

Wenn dem so ist, dann versuch mal, den Timestamp in einem Feld vom Typ "big int" oder so zu speichern. ;)


Dunsti
 
der Begriff "Timestamp" sind in PHP und MySQL nicht das Gleiche.
Wenn die Spalte 'zeit' in der MySQL-Tabelle 'counterdaten' vom Typ "Timestamp" ist könnte dies evtl. das Verhalten erklären. (bin mir nicht sicher, aber ein Timestamp in PHP hat glaub ich 14 Stellen, in MySQL nur 10 oder so)

Es reicht wenn man die Timestamps als INT in der Datenbank abspeichert. Big INT ist hier nicht nötig und würde bei größeren Datenmengen auch auf die Performance gehen :D

An deinem Script ist alles richtig. Solltest nur, wie Neo gesagt hat die IP über die IF Anweisung packen.

Ansonstens sieht es gut aus.
 
Danke für die Hinweise. Ich hab mich grad erschrocken, denn ich hatte die Timestamp in der DB in einem INT-Feld, daß 10 Stellen hat, gespeichert gehabt. Jetzt hab ich die Stellenanzahl erhöht.. aber die Timestamp scheint zur Zeit genau 10 Stellen zu haben.

Kann das sein?
 

Neue Beiträge

Zurück