Joomla 5 Notice

We are pleased to announce that as of January 29, 2024, all of our Joomla extensions are compatible with Joomla 5.

For all who are still updateing from Joomla 3 to Joomla 4: Joomla 4 Migration instructions are available here:

There is now a separate Documentation for Visforms for Joomla 4 and for Visforms for Joomla 5!

Forum

Visforms Subscription user can ask questions in our forum. Please log in with the relevant user first.
Everybody can access the forum for reading.

Please only ask 1 question per topic.

Code snippets

More
9 months 2 weeks ago #9607 by NHBoss
Code snippets was created by NHBoss
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 "#_
Code:
visitcounter" und
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  

More
9 months 1 week ago #9616 by Administrator IV
Replied by Administrator IV on topic Code snippets
Hallo Norbert,

die reine Funktionalität, um Meta-Informationen über den Zugriff auf die Seite oder den Artikel zu ermitteln, und auch die Teile der Zugriffe mit Lesen/Schreiben auf die Datenbank, sind prima.

Die IP ist nicht geeignet um sinnvoll einzelne Besucher wiederzuerkennen geschweige denn zu zu identifizieren:

- Alle Rechner in einem LAN haben vom Internet aus gesehen die gleiche öffentlich IP-Adresse.
Dazu gehören etwa private Rechner hinter einer Fritzbox oder etwa alle geschäftlichen Rechner in einem Firmen-Netzwerk.
- VPN Zugänge sind mittlerweile mehr und mehr verbreitet.
Auch ich nutze ein VPN und bin daher nie mit meiner eigenen IP-Adresse im Internet sondern mit ständig wechselnden IP-Adressen aus einem Adresse-Bereich des VPN-Anbieters.
Dazu gehören auch IP-Adressen aus dem Ausland, falls gewünscht.
Damit kannst du dann etwa auch das original amerikanische Netflix sehen ...
- Internet-Zugangs-Provider wechseln die IP-Adressen der privaten Endpunkte mehr oder weniger regelmäßig.

Du verwendest Cookies, um Webseiten-Benutzer wiederzuerkennen.
Die Session-ID spielt dabei auch eine Rolle.

Frage:
Wie bettest du deinen PHP-Code in den Artikel ein?

Liebe Grüße, Ingmar

:idea: I recommend you the new and up-to-date documentation for Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/en/docs/
Most of this also applies retrospectively to Joomla 3.
Please only ask 1 question per topic :-).

:idea: Ich empfehle Dir die neue und aktuelle Dokumentation für Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/docs/
Das meiste gilt rückwirkend auch für Joomla 3.
Bitte immer nur 1 Frage pro Thema stellen :-).

Moderators: Administrator AVAdministrator IV
Powered by Kunena Forum