Da ich mit keinem der ganzen Grafischen Counter zufrieden bin/war und ich außerdem reinen Text wollte habe ich mir mal schnell mein eigenes geschrieben mit 3 Werten die zur Analyse bereit stehen aussehen tut das ganze dann ca. so:
Zitat
Seitenaufrufe: 99 | Besucher: 27 | unterschiedliche Besucher: 26
Zu erwähnen wäre das das ganze auf einem URl-System besteht welches immer index.php?site=Seitenname ist, falls das bei euch nicht so ist müsstet ihr das ganze leicht abwandeln, dazu aber später.
Als erstes zu den DB-Tabellen:
counter_pages
[TABLE='class: grid, align: left']
[tr][td]
page
[/td][td]
count
[/td][/tr][tr][td]
home
[/td][td]
5
[/td][/tr][tr][td]
varchar(20)
[/td][td]
varchar(50)
[/td][/tr]
[/TABLE]
Achja, für "count" ist ein Standard-Wert von 0 zu setzen.
counter_user
[TABLE='class: grid, align: left']
[tr][td]
ip
[/td][td]
timestamp
[/td][td]
anzahl
[/td][/tr][tr][td]
000.000.00.000
[/td][td]
1314370503
[/td][td]
1
[/td][/tr][tr][td]
varchar(20)
[/td][td]
varchar(50)
[/td][td]
varchar(50)
[/td][/tr]
[/TABLE]
Und hier bekommt die Spalte "timestamp" einen Wert der mehr als 24h zurückliegt, z.B.: 1314370503 und "anzahl" bekommt einen Standard-Wert von 1 zugewiesen.
Das fette sind die Spaltenbezeichnungen und das fett-unterstrichene sind die Primärschlüssel, für alles habe ich die Kollation "latin1_german1_ci" verwendet.
Dann zu dem php-Script welches ihr am besten per include auf der index.php Seite einbindet oder falls ihr nicht mit index.php?site=Seitenname arbeitet dann auf jeder Seite.
<?php
// DB-Verbindung herstellen
include "connection.php";
// die IP des Betrachters eintragen (durch Primärschlüssel gibt es keine doppelt)
// wer die Daten seiner Besucher sensibler behandeln will kann auch auf md5($_SERVER['REMOTE_ADDR']) zurückgreifen
$sql_insert_ip = "INSERT INTO ".
"counter_user (ip, timestamp ) ".
"VALUES ('".$_SERVER['REMOTE_ADDR']."', '".
time()."')";
mysql_query ($sql_insert_ip);
// den Datensatz auslesen der zu der IP des Betrachters gehört
// falls ihr oben auf die md5() Verschlüsselung zurückgegriffen habt dann müsst ihr die hier auch einbauen
$sql_select_ip = "SELECT ".
"* ".
"From ".
"counter_user ".
"WHERE ".
"(ip = '".$_SERVER['REMOTE_ADDR']."')";
$result_ip = mysql_query($sql_select_ip);
while($row_ip = mysql_fetch_array($result_ip)) {
// ermitteln ob der letzte Besuch der IP mehr/genau 24h vorbei ist
$abstand = time() - ($row_ip['timestamp'] + (24*60*60));
if($abstand >= 0) {
// wenn ja dann wird hier die Anzahl seiner Besuche um 1 erhöt
$row_ip['anzahl']++;
// den aktuellen timestamp und die Anzahl seiner Besucher eintragen
// falls ihr oben auf die md5() Verschlüsselung zurückgegriffen habt dann müsst ihr die hier auch einbauen
$sql_update_ip = "UPDATE counter_user ".
"SET anzahl='".$row_ip['anzahl']."', timestamp='".time()."' ".
"WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
mysql_query($sql_update_ip); }
}
// auslesen wie aller Datensätze in der User-Liste
$sql_select_num = "SELECT ".
"* ".
"From ".
"counter_user ";
$result_num = mysql_query($sql_select_num);
// die Anzahl aller Datensätze ermitteln
$num_rows_num = mysql_num_rows($result_num);
// und hier werden die Besuchsanzahlen von jedem Besucher zusammengerechnet
$count_user = '0';
while($row_num = mysql_fetch_array($result_num)) {
$count_user = $count_user + $row_num['anzahl']; }
// HIER die Änderung einfügen falls nötig
// so und hier werden jetzt zu jeder Seite einzeln alle Aufrufe (die nicht vom Cache geschehen) zu dem passenden Datensatz eingetragen
// auslesen des Datensatzes der zu der GET-Variable "site" passt
// hier wäre die Änderung vorzunehmen falls ihr nicht index.php?site=Seitenname verwendet
$sql_select_page = "SELECT ".
"* ".
"From ".
"counter_pages ".
"WHERE ".
"(page = '".$_GET['site']."')";
$result_page = mysql_query($sql_select_page);
while($row = mysql_fetch_array($result_page)) {
// für den passenden Datensatz wird hier die Anzahl der Besuche um 1 erhöt und wieder in die datenbank eingetragen
// hier wäre dann auch die 2. Stelle an der etwas geändert werden müsste falls ihr nicht mit index,php?site=Seitenname arbeitet
$count_page = $row['count'] + 1;
$sql_update_page = "UPDATE counter_pages ".
"SET count='".$count_page."' ".
"WHERE page='".$_GET['site']."'";
mysql_query($sql_update_page); }
?>
Alles anzeigen
So, dann zu der Ausgabe der Variablen, funktioniert nur auf Seiten wo auch das Script eingebunden ist:
Seitenaufrufe: <?php echo $count_page; ?> | Besucher: <?php echo $count_user; ?></span> | unterschiedliche Besucher: <?php echo $num_rows_num; ?>
gestalten müsstet ihr es euch noch selber, ich habe es für meinen Footer z.B. so gemacht:
<span class="description">Seitenaufrufe: <span style="color: #000000;"><?php echo $count_page; ?></span> | Besucher: <span style="color: #000000;"><?php echo $count_user; ?></span> | unterschiedliche Besucher: <span style="color: #000000;"><?php echo $num_rows_num; ?></span></span>
die CSS dazu sieht so aus:
body {
background-color: #666666;
font-family: Arial, sans-serif;
font-size: 12px;
font-weight: normal;
font-style: normal;
text-decoration: none;
color: #000000;
letter-spacing: 0em;
white-space: pre-wrap; }
.description {
font-family: Arial, sans-serif;
font-size: 11px;
font-style: normal;
color: #666666;
text-decoration: none; }
Alles anzeigen
So, nun zu der Änderung die gemacht werden muss wenn ihr den Dateinamen nicht per GET-Variable auslesen könnt:
// Dateinamen inklusive Endung(.html .php etc.) auslesen
$site = substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['SCRIPT_NAME'],"/")+1);
Und dann an den zwei Stellen wo $_GET['site'] vorkommt das ganze durch $site ersetzen und schon ist es wieder fertig, in der DB müsst ihr dann nur noch die Dateinamen mit der Endung eintragen.
Alle die das per GET-Variable lösen können müssen dann alle GET-Variablen-Inhalte wofür sie das haben wollen in die DB eintragen und dann läuft das Script.
Ich hoffe, dass ich euch damit etwas weiterhelfen konnte und falls es von den Profis noch Kritik daran gibt dann immer her damit, und falls ich das Script irgendwie erweiter schreibe ich es natürlich auch noch.
MfG