Joomla 5 Mitteilung

Wir freuen uns mitteilen zu können, dass seit dem 29. Januar 2024 alle unsere Joomla Erweiterungen mit Joomla 5 kompatible sind.

Für alle die gerade noch von Joomla 3 auf 4 aktualisieren: Anleitungen für die Joomla 4 Migration gibt es hier:

Es gibt nun auch eine eigenständige Dokumentation für Visforms für Joomla 4 und für Visforms auf Joomla 5

Forum

Visforms Subscription Inhaber können in unserem Forum Fragen stellen. Bitte mit dem entsprechenden Benutzer anmelden.
Jeder kann lesend auf das Forum zugreifen.

Bitte stellen Sie nur 1 Frage pro Thema.

Code snippets

Mehr
9 Monate 2 Wochen her #9607 von NHBoss
Code snippets wurde erstellt von 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  

Mehr
9 Monate 1 Woche her #9616 von Administrator IV
Administrator IV antwortete auf 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 :-).

Moderatoren: Administrator AVAdministrator IV
Powered by Kunena Forum