|
| SQL-Counter | |
Firewolf Administrator
|
Verfasst am: 10.11.2006, 12:01 |
|
|
|
Hinweis: Eine neue Version des MySQL-Counters steht zur Verfügung: Hier entlang.
Wie angekündigt hier nun der Counter als MySQL-Version:
PHP-Code: | <?php
##################################
# #
# MySQL-Datenbank Zugangsdaten #
# #
##################################
$dbhost = "localhost"; // Datenbank-Adresse (IP); Standard "localhost"
$dbname = "datenbank"; // Datenbank-Name
$dbuser = "benutzername"; // Benutzername
$dbpwd = "passwort"; // Benutzerpasswort
#### Tabellen ####
$db_counter = "sqlc_counter";
$db_iplog = "sqlc_iplog";
#### Einstellungen ####
$splitter = " | ";
##################
$datenbank = mysql_connect($dbhost, $dbuser, $dbpwd);
mysql_select_db($dbname, $datenbank);
if ($_GET[action] == "install") // Tabellen-Installation
{
$installerror = 0;
$tabellencheck1 = @mysql_query("SELECT * FROM $db_counter WHERE id = '1'");
if (@mysql_num_rows($tabellencheck1) != 0)
{
$installerror = 1;
echo "Die Tabelle "$db_counter" existiert bereits.<br>";
}
$tabellencheck2 = @mysql_query("SELECT * FROM $db_iplog");
if (@mysql_num_rows($tabellencheck2) != 0)
{
$installerror = 1;
echo "Die Tabelle "$db_iplog" existiert bereits.";
}
if ($installerror == 1)
{
exit;
}
else
{
$install1 = "CREATE TABLE $db_counter (";
$install1 .= "id int(10) NOT NULL default '0', ";
$install1 .= "online_record int(20) NOT NULL default '0', ";
$install1 .= "today int(20) NOT NULL default '0', ";
$install1 .= "yesterday int(20) NOT NULL default '0', ";
$install1 .= "day_record int(20) NOT NULL default '0', ";
$install1 .= "total int(20) NOT NULL default '0', ";
$install1 .= "pages_total int(20) NOT NULL default '0', ";
$install1 .= "date int(20) NOT NULL default '0', ";
$install1 .= "PRIMARY KEY (id)) TYPE=MyISAM";
mysql_query($install1) or die (mysql_error() . ": " . mysql_error() . "\n");
mysql_query("INSERT INTO $db_counter SET id = '1', online_record = '1'");
$install2 = "CREATE TABLE $db_iplog (";
$install2 .= "id int(10) NOT NULL auto_increment, ";
$install2 .= "ip varchar(254) NOT NULL default '', ";
$install2 .= "timestamp int(20) NOT NULL default '0', ";
$install2 .= "PRIMARY KEY (id)) TYPE=MyISAM";
mysql_query($install2) or die (mysql_error() . ": " . mysql_error() . "\n");
mysql_query("INSERT INTO $db_iplog SET ip = '127.0.0.0'");
echo "Installation erfolgreich!";
exit;
}
}
$tabellencheck1 = @mysql_query("SELECT * FROM $db_counter WHERE id = '1'");
$tabellencheck2 = @mysql_query("SELECT * FROM $db_iplog");
if (@mysql_num_rows($tabellencheck1) == 0)
{
@mysql_query("INSERT INTO $db_counter SET id = '1', online_record = '1'");
}
if (@mysql_num_rows($tabellencheck2) == 0)
{
@mysql_query("INSERT INTO $db_iplog SET ip = '127.0.0.0'");
}
$tabellencheck3 = @mysql_query("SELECT * FROM $db_counter WHERE id = '1'");
$tabellencheck4 = @mysql_query("SELECT * FROM $db_iplog");
if (@mysql_num_rows($tabellencheck3) == 0 || @mysql_num_rows($tabellencheck4) == 0)
{
echo "ERROR: Tabellen sind nicht korrekt installiert.";
exit;
}
$timestamp = time(); // Aktuelle Zeit
if (getenv('HTTP_X_FORWARDED_FOR'))
{
$varip = getenv('HTTP_X_FORWARDED_FOR');
}
else
{
$varip = getenv('REMOTE_ADDR');
}
$countuser = 1;
$newuser = 0;
$fetchlogs = mysql_query("SELECT * FROM $db_iplog", $datenbank);
$loganzahl = mysql_affected_rows();
if ($loganzahl > 0) // Wenn bereits user geloggt wurden
{
while ($flogs = mysql_fetch_array($fetchlogs))
{
if ($flogs[ip] == $varip) // User ist bereits geloggt
{
$diff = $timestamp - $flogs[timestamp];
if ($diff > 900) // Liegt der letzte Besuch länger als diese Zeit zurück, so gilt der User als neuer Besucher
{
$countuser = 1;
}
else
{
$countuser = 0;
}
$newuser = $flogs[id];
if ($diff > 300) // Wenn der letzte Besuch länger als diese Zeit her ist, wird die Zeit aktualisiert.
{
$sql = "UPDATE $db_iplog SET ";
$sql .= "timestamp = '$timestamp' ";
$sql .= "WHERE id = '$newuser'";
mysql_query($sql);
}
}
}
}
else
{
$countuser = 1; // User zählt als neuer Besucher (ist noch nicht geloggt)
}
$fetchstats = mysql_query("SELECT * FROM $db_counter WHERE id = '1'", $datenbank);
$fstats = mysql_fetch_array($fetchstats);
$day = date("d");
if ($day != $fstats[date]) // Ein neuer Tag ist angebrochen...
{
$yesterday = $fstats[today];
$sql = "UPDATE $db_counter SET ";
$sql .= "date = '$day', ";
$sql .= "yesterday = '$fstats[today]', ";
if ($countuser == "1")
{
$sql .= "today = '0' ";
}
else
{
$sql .= "today = '1' ";
}
$sql .= "WHERE id = '1'";
mysql_query($sql);
}
$fetchstats = mysql_query("SELECT * FROM $db_counter WHERE id = '1'", $datenbank);
$fstats = mysql_fetch_array($fetchstats);
$newcounts = 0;
if ($countuser == "1") // User wird gezählt
{
#### ip-log ####
if ($newuser == "0")
{
$sql = "INSERT into $db_iplog SET ";
$sql .= "ip = '$varip', ";
$sql .= "timestamp = '$timestamp'";
}
else
{
$sql = "UPDATE $db_iplog SET ";
$sql .= "ip = '$varip', ";
$sql .= "timestamp = '$timestamp' ";
$sql .= "WHERE id = '$newuser'";
}
mysql_query($sql);
################
$newtoday = $fstats[today] + 1;
if ($newtoday > $fstats[day_record]) // Neuer Tagesrekord?
{
$newdayrecord = $newtoday;
}
else
{
$newdayrecord = $fstats[day_record];
}
$newtotal = $fstats[total] + 1;
$newcounts = 1;
}
$newpagestotal = $fstats[pages_total] + 1; // Neuer Seitenhit
if ($newcounts == "1")
{
$sql = "UPDATE $db_counter SET ";
$sql .= "today = '$newtoday', ";
$sql .= "day_record = '$newdayrecord', ";
$sql .= "total = '$newtotal', ";
$sql .= "pages_total = '$newpagestotal' ";
$sql .= "WHERE id = '1'";
mysql_query($sql);
}
else
{
$sql = "UPDATE $db_counter SET ";
$sql .= "pages_total = '$newpagestotal' ";
$sql .= "WHERE id = '1'";
mysql_query($sql);
}
##### online-user #####
$newonline = 0;
$fetchonline = mysql_query("SELECT * FROM $db_iplog", $datenbank);
$useranzahl = mysql_affected_rows();
if ($useranzahl > 0)
{
while ($fonline = mysql_fetch_array($fetchonline))
{
$diff = $timestamp - $fonline[timestamp];
if ($diff <= 300) // Alle Logeinträge die weniger als diese Zeit als sind gelten als Online-User
{
$newonline += 1;
}
}
}
if ($newonline < 1) // Weniger als 1 nicht möglich...
{
$newonline = 1;
}
if ($newonline > $fstats[online_record]) // Neuer Onlinerekord?
{
$newonlinerecord = $newonline;
$sql = "UPDATE $db_counter SET ";
$sql .= "online_record = '$newonlinerecord' ";
$sql .= "WHERE id = '1'";
mysql_query($sql);
}
#######################
$fetchlogs = mysql_query("SELECT * FROM $db_iplog", $datenbank);
$logsanzahl = mysql_affected_rows();
if ($logsanzahl > 100) // Es werden maximal [Anzahl] IPs + Timestamp gespeichert
{
$y = $logsanzahl - 100;
while ($y > 0)
{
$fetchlogs = mysql_query("SELECT * FROM $db_iplog ORDER BY id ASC", $datenbank);
$flogs = mysql_fetch_array($fetchlogs);
mysql_query("DELETE FROM $db_iplog WHERE id = '$flogs[id]'");
$y -= 1;
}
}
$fetchstats = mysql_query("SELECT * FROM $db_counter WHERE id = '1'", $datenbank);
$fstats = mysql_fetch_array($fetchstats);
######### Counter ausgeben ##########
$writecounter = "Online: ".$newonline.$splitter;
$writecounter .= "Onlinerekord: ".$fstats[online_record].$splitter;
$writecounter .= "Heute: ".$fstats[today].$splitter;
$writecounter .= "Gestern: ".$fstats[yesterday].$splitter;
$writecounter .= "Tagesrekord: ".$fstats[day_record].$splitter;
$writecounter .= "Gesamt: ".$fstats[total].$splitter;
$writecounter .= "Seitenaufrufe: ".$fstats[pages_total];
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" align="center" valign="top" style="padding: 2px"><?php echo $writecounter; ?></td>
</tr>
</table> |
Die Datei zum Download gibt es HIER.
Der Counter befindet sich noch in der Testphase... erst wenn alles läuft kommt eine Anleitung dazu und er wird auf murb.com gesetzt.
Kurzanleitung:
1. counter.php öffnen und Datenbank-Zugangsdaten anpassen
2. counter.php uploaden
3. Im Browser folgendes aufrufen: http://www.deinedomain.de/counter.php?action=install
4. counter.php aufrufen und nachsehen, ob er funktioniert
5. counter.php an der gewünschten Stelle einbinden
Bei Fragen und Problemen hier posten.
|
Zuletzt bearbeitet von Firewolf am 01.11.2007, 23:11, insgesamt 2-mal bearbeitet |
|
|
|
|
| | |
cheetah
|
Verfasst am: 11.11.2006, 18:39 |
|
|
|
Hi nochmal
Wie kann ich den Counter senkrecht anordnen? Also
Online
1
-----
Onlinerekord
1
Also eigntl alles mehr mittig
Hab schon <br> usw. ausprobiert, wird aber nicht von der php-datei akzeptiert
P.S.Der Counter funzt 1a!! Fettes Lob!
//Edit:
Der counter funzt fast 1a:
Wenn ich die Tabellen leere zeigt der counter die Fehlermeldung an das die Tabellen nicht richtig installiert sind. Ist des a Bug oder muss des so sein?
|
_________________ MFG
ChEeTaH
----------
There are 10 types of people in the world: Those who understand binary, and those who don't... |
|
|
|
|
| verzweifelt | |
moni Gast
|
Verfasst am: 15.11.2006, 01:50 |
|
|
|
hi,
zunächst herzlichen dank für das script.
gestern installiert, design angepasst - alles funktionierte einwandfrei.
heute rufe ich meine seite auf und hab die fehlermeldung:
"ERROR: Tabellen sind nicht korrekt installiert" |
was läuft da schief? würde mich über hilfe freuen.
gruß, moni
|
|
moni Gast
|
Verfasst am: 15.11.2006, 01:55 |
|
|
|
cheetah hat Folgendes geschrieben: | Wie kann ich den Counter senkrecht anordnen?
...Hab schon <br> usw. ausprobiert |
für zeilenumbruch:
suche
$splitter = " | ";
und ersetze mit
$splitter = "<br />";
|
|
Firewolf Administrator
|
Verfasst am: 15.11.2006, 10:47 |
|
|
|
cheetah hat Folgendes geschrieben: | Wenn ich die Tabellen leere zeigt der counter die Fehlermeldung an das die Tabellen nicht richtig installiert sind. Ist des a Bug oder muss des so sein? |
Das war Absicht, da es eine schnelle Lösung war... habe das ganze jetzt etwas verbessert. Nun sollte (sofern beide Tabellen vorhanden sind) der Counter nach dem Leeren der Tabellen keine Fehlermeldung mehr ausspucken.
Außerdem habe ich die "Trennungsvariable" ($splitter) nach oben gepackt.
Der nächste Schritt wird eine verbesserte Anordungsmöglichkeit, damit z.B. bei senkrechter Ausgabe die Zahlen direkt untereinander stehen (wie auf murb.com zu sehen).
|
|
| Re: verzweifelt | |
| | |
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 6
|
|
|
| |