Willkommen in der Webstatt Zum Webstatt Blog und Stories
fish fish am 29.05.07 23:53

HAI.
mich plagt eine eigentlich ziemlich einfache aufgabe und zwar will ich nur einen counter erstellen.

ich will natürlich auch immer vollen überblick auf die seitenzugriffe haben, deshhalb hätt ichs gern, dass man schöne statistiken anzeigen lassen kann. zum beispiel seitenzugriffe pro jahr, seitenzugriffe zur stunde des tages, zur stunde des tages im juni 07 und so weiter. reicht es wenn ich die zugriffszeit in der datenbank speichere oder geht das noch nicht?

wie kann ich das ganze dann anzeigen lassen?

netcup.de Warum gibt es hier Werbung?
Neals am 30.05.07 11:55

Kannst ja in ne Tabelle einfach immer den Timestamp speichern, sobald jemand ne Seite aufruft, das klappt aber verfälscht natürlich ziemlich die Statistik, wenn jemand wirr rumklickt verursacht er kurz mal 20 Zugriffe. Deswegen fangen die meisten Counter das ab und speichern die IP, dann werden alle Zugriffe innerhalb einer Stunde z.B. nur als ein mal auf dem Counter gezählt.

Sven Sven am 30.05.07 13:15

Auf GFX-World.net gibts ein sehr ausführliches Tutorial für einen Counter, der genau
so arbeitet, wie dus haben möchtest. Könntest dir also mal angucken wie der das
gemacht hat. Allerdings ist die Seite zur Zeit offline...

fish fish am 30.05.07 15:00

hm also es geht mir jetzt weniger um die verfälschten ergebnisse, die ip-sperre kriegt man überall her. mir gehts darum, dass man dann aus den gepeicherten daten auch was sinnvolles anzeigen kann. also wnen ich nur die zugriffszeit speichere (und in ner anderen tabelle nochmal ip und zugriffszeit für die sperre), dass ich dann daraus verschiedene ausgaben bekommen kann.

@ sven: du kannst dich nicht zufällig erinner wie das tut ungefähr gearbeitet hat, oder?

Sven Sven am 30.05.07 18:59

Ne sorry, ist doch schon etwas zu lange her das ich mir das Tut angeschaut habe. Die Seite wird aber wohl eh demnächst wieder erreichbar sein.

der_nic der_nic am 30.05.07 19:55

Das dürfte auch mit nur einer Tabelle machbar sein...
Du brauchst lediglich eine Tabelle mit
[FONT=courier new]id | ip | timestamp[/FONT]
und beim Eintragen überprüfst du ob ein Eintrag unter der IP des momentanen Besuchers in einer Zeitspanne von XX Minuten (zb 30min) bereits existiert.
Die statistischen Angaben lassen sich alle mit geschickten Querys auslesen...

fish fish am 30.05.07 20:34

eigentlich gehts mir genau um diese geschickten queries... ich hab keinen schimmer wie ich das machen soll...

der_nic der_nic am 30.05.07 20:54

nun die kannst du über WHERE Klauseln mit COUNT verbinden zb um alle Einträge die am Tags XX.XX.XXXX zu finden machst du
$sql = "SELECT COUNT(*) AS ´tag1´ FROM ´counter´ WHERE ´time´ = 'XXXX-XX-XX XX:XX:XX'";

es gibt noch verschiedene Funktionen die du direkt in MYSql verwenden kannst.

fish fish am 31.05.07 10:23

edit
okay, hab auch die rekorde inzwichen hinbekommen

okay, ich hab es jetzt einigermassen hinbekommen.

was mir jetzt noch fehlt sind maximalwerte. wie bekomme ich das hin?
also rekord von diesem monat, diesem jahr all time ect?

(es werden nur die zugriffszeiten in DATETIME gespeichert)

fish fish am 31.05.07 19:29

okay, dafür habe ich ein neues problem.

und dass dieser code auf meinem server zu keinem fehler fürhr, auf einem anderen aber schon.
$abfrage_zaehlerstand_diese_woche = "SELECT COUNT(*) FROM `".$db_prefix."counter` WHERE DATE(`datum`) = DATE(NOW() - INTERVAL ".$i." DAY)";

$i ist eine zahl....

das problem kann man auch live begutachten unter
http://rebellen-web.de/prepage/statistik.php?anzeige=alles und
http://beta.bierquartier.de/rebellen/prepage/statistik.php?anzeige=alles

kann mir jemand helfen?

der_nic der_nic am 31.05.07 20:18

lass dir mal mit mysql_error() eine genauere Fehlerbeschreibung ausgeben (bei dem Server wos nicht funktioniert)

fish fish am 01.06.07 09:34

fehlermeldung + problemstelle jeweils:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(`datum`) = DATE('2007-05-31 18:58:15')' at line 1
$abfrage_groesster_wert_in_einem_jahr = "SELECT COUNT(*) FROM `".$db_prefix."counter` WHERE YEAR(`datum`) = YEAR('".$row->datum."')";

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(`datum`) = DATE(NOW() - INTERVAL 0 DAY)' at line 1
$abfrage_zaehlerstand_diese_woche = "SELECT COUNT(*) FROM `".$db_prefix."counter` WHERE DATE(`datum`) = DATE(NOW() - INTERVAL ".$i." DAY)";

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(`datum`) = DATE(NOW() - INTERVAL 5 DAY)' at line 1
$abfrage_zaehlerstand_jahre = "SELECT COUNT(*) FROM `".$db_prefix."counter` WHERE EXTRACT(YEAR FROM `datum`) = '".$richtiges_datum_dieses_jahr."'";

weiss jemand woher die fehlermeldungen kommen?

der_nic der_nic am 01.06.07 13:57

lass dir mal den vollständigen (geparsten) Query ausgeben. Könnte es möglich sein dass die Variablen $db_prefix, $row->datum und $i falsch sind..?
Weil die Querys sollten soweit in Ordnung sein, also bei mir local mit Beispieldaten funktionieren sie

fish fish am 01.06.07 14:29

hmm also ich meine dass alles richtig ist...
http://rebellen-web.de/prepage/statistik.php?anzeige=alles

kann es eine rolls spielen dass mein server mysq5 hat und der ander mysql4?

der_nic der_nic am 01.06.07 14:42

Eigentlich nicht...
weil die Funktionen YEAR, DATE, usw gibt es auch in mySQL4
welche Version hast du den auf dem anderen Server? Tiefer als 4.1.1?

fish fish am 01.06.07 15:12

mein server: 5.0.24
anderer server: 4.0.27

kann man da irgentwas machen?

der_nic der_nic am 01.06.07 15:27

den Hoster fragen ob er nicht eine neurere Version von mySQL updaten kann oder halt den Hoster wechseln...

fish fish am 01.06.07 15:47

hm hab nen neue db mit mysql5 angelegt. jetzt gehts... danke für die hilfe!

der_nic der_nic am 01.06.07 17:00

bitte ;)

ps: in deinem mittleren Query könntest du NOW() auch durch CURRENT_DATE ersetzen wenns nur ums Datum und nicht um einen genauen Timestamp geht... Geht aber auch so...

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt