Hallo liebe Admins.
Da dies ja ein "Forum" ist und nicht nur eine Frageecke habe ich gedacht, dass man ja auch z.B. ein paar Code-Snippets hier posten könte, oder was meint ihr dazu?
Ich habe mich immer geärgert, dass die Besucherzähler zwar die Anzahl der Besucher und auch die Länder anzeigen, aber nicht die IP-Adressen. Es ist datenschutzrechtlich zwar etwas kritisch und nicht jeder darf diese einsehen, aber die Admins können ja über die Srverstatistiken auch die IPs erfahren. So habhe ich hier mal eine Tabelle in der Datenbank mit der Tabelle "#_
den Feldern "timestamp" als datetime, "id" als int(11), "ip" als varchar(11) und "visits" als int(11) angelegt.
Und dazu diesen Code im Beitrag eingefügt:
<?php
$servername = "localhost";
$username = "Benutzername";
$password = "Benutzer-Passwort";
$dbname = "DB-Name";
// Verbindung mit Datenbank herstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Verbindung überprüfen
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
// IP-Adresse des Besuchers erhalten
$visitor_ip = $_SERVER;
// Überprüfen, ob die IP-Adresse bereits in der Datenbank existiert
$sql = "SELECT id FROM visitcounter WHERE ip = '$visitor_ip'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// IP-Adresse existiert bereits in der Datenbank, erhöhe den Besucherzähler
$sql = "UPDATE visitcounter SET visits = visits + 1 WHERE ip = '$visitor_ip'";
$conn->query($sql);
} else {
// IP-Adresse existiert nicht in der Datenbank, füge sie hinzu
$sql = "INSERT INTO visitcounter (ip, visits) VALUES ('$visitor_ip', 1)";
$conn->query($sql);
}
// Summe der täglichen Besucher abrufen
$sqlDaily = "SELECT DATE(timestamp) AS visit_date, COUNT(DISTINCT ip) AS daily_visitors
FROM visitcounter
GROUP BY DATE(timestamp)
ORDER BY DATE(timestamp) DESC
LIMIT 7"; // Anzahl der letzten 7 Tage
$resultDaily = $conn->query($sqlDaily);
echo "Tägliche Besucher:<br>";
if ($resultDaily->num_rows > 0) {
while ($row = $resultDaily->fetch_assoc()) {
echo $row . ": " . $row . " Besucher<br>";
}
} else {
echo "Keine Daten vorhanden.<br>";
}
// Summe der wöchentlichen Besucher abrufen
$sqlWeekly = "SELECT YEARWEEK(timestamp) AS week_number, COUNT(DISTINCT ip) AS weekly_visitors
FROM visitcounter
GROUP BY YEARWEEK(timestamp)
ORDER BY YEARWEEK(timestamp) DESC
LIMIT 4"; // Anzahl der letzten 4 Wochen
$resultWeekly = $conn->query($sqlWeekly);
echo "<br>Wöchentliche Besucher:<br>";
if ($resultWeekly->num_rows > 0) {
while ($row = $resultWeekly->fetch_assoc()) {
echo "Woche " . $row . ": " . $row . " Besucher<br>";
}
} else {
echo "Keine Daten vorhanden.<br>";
}
// Summe der monatlichen Besucher abrufen
$sqlMonthly = "SELECT DATE_FORMAT(timestamp, '%Y-%m') AS month, COUNT(DISTINCT ip) AS monthly_visitors
FROM visitcounter
GROUP BY DATE_FORMAT(timestamp, '%Y-%m')
ORDER BY DATE_FORMAT(timestamp, '%Y-%m') DESC
LIMIT 1"; // Anzahl letzter Monat
$resultMonthly = $conn->query($sqlMonthly);
echo "<br>Monatliche Besucher:<br>";
if ($resultMonthly->num_rows > 0) {
while ($row = $resultMonthly->fetch_assoc()) {
echo $row . ": " . $row . " Besucher<br>";
}
} else {
echo "Keine Daten vorhanden.<br>";
}
$sql = "SELECT DATE(timestamp) AS visit_date, COUNT(DISTINCT ip) AS daily_visitors, GROUP_CONCAT(DISTINCT ip) AS ip_addresses
FROM visitcounter
GROUP BY DATE(timestamp) DESC
LIMIT 7"; // Anzahl letzte 7 Tage
$result = $conn->query($sql);
// Anzeige Ergebnisse
echo "Besucherstatistik:<br>";
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "Datum: " . $row . "<br>";
echo "Tägliche Besucher: " . $row . "<br>";
echo "IP-Adressen: " . $row . "<br>";
echo "<br>";
}
} else {
echo "Keine Daten vorhanden.<br>";
}
// Verbindung beenden
$conn->close();
?>
Vielleicht hat ja jemand noch Verbesserungsvorschläge?
Herzliche Grüße
Norbert