Ankündigung

Einklappen
Keine Ankündigung bisher.

Klick Counter

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Klick Counter

    Hallo

    Ich habe hier einen einfachen Klick Conter gefunden und ihn etwas geändert.
    Es gibt aber noch Probleme.
    Ich habe schon versucht mit dem Autor Kontakt aufzunehmen, ist mir aber nicht gelungen.
    Auch eine Anmeldung im Forum hat zwar Funktioniert, aber schreiben kann ich nichts und auf eine Kontaktanfrage gab es keine Antword.

    Das ganze ist kein Meister Stück und vielleicht hat ja jemand Lust und Interesse das mal zu Überarbeiten.
    Mein Problem ist noch, das ich Seiten mit wechselnden Datum habe und oder Besucher noch Seiten Im Cache haben.
    Das verfälscht natürlich die Anzeige.

    hier mal die Anzeige aus der Testseite
    Richtige: monat aktuelles Datum.txt
    Falsche: monat2.php?datum=2022-07-28.php.txt


    mfg
    Michael

    PHP-Code:
    $datum date("Y-m-d");
    /*   einfacher Download-Counter ohne Datenbank auf Textdateienbasis
    Autor: Julian (http://forum.jswelt.de/members/julian.html)
    !!!!! Dieser Vermerk darf nicht entfernt werden !!!!!
    */
    $filename $_GET['id']; // holt sich den Dateinamen aus der URL
    // ----- URL aus Link -----
    $finden = array(
          
    "index.php",
          
    "news.php",
          
    "seite1.php",
          
    "seite2.php",
          
    "impressum.php"
    );
    // ----- txt Dateiname der anstatt der URL erzeugt werden soll -----
    $ersetzen = array(
            
    "Startseite",
            
    "News",
            
    "Seite 1",
            
    "Seite 2",
            
    "kein Impressum"
    );
    $filenameneu str_replace($finden$ersetzen$filename); // ersetzt die URL gegen einen Anzeige Text in der Statistik
    if (!empty($filename)) {
             
    //wenn noch keine Statistik angelegt, Zähler bei 0 beginnen
             
    $counter = @file_get_contents("statistics/$filenameneu.txt");
             if (
    $counter == "") {
                 
    $counter 0;
             }
             
    //bei jedem Download Zähler um 1 erhöhen
              
    $counter++;
             
    //Downloadanzahl in Textdatei schreiben mit Namen "Dateiname".txt
             
    @file_put_contents("statistics/$filenameneu.txt"$counter);
             
    //zum angeforderten Datei-Download weiterleiten
              
    header("Location: $filename");
         } else { 
    //wenn in der URL kein Dateiname angegeben, Fehlermeldung anzeigen
             
    echo "Fehler: Keine gültige Download-ID!";      } 
    Hier noch die Anzeige

    PHP-Code:
    <!DOCTYPE html>
    <html lang="de" dir="ltr">

    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Statistic Testseite</title>

        <style>
            body {
                font-family: Helvetica, sans-serif;
                text-align: center;
                background-color: darkgrey;

            }

            .inhalt {
                border: 1px solid black;
                padding: 5px;
                margin: 20px;
                width: 1210px;
                font-size: 16px;
                display: flex;
                flex-direction: column;
                background-color: #dcdcdc;
            }

            .ueberschrift {
                background-color: coral;
                border: 1px solid black;
                margin: 2px 2px 10px;
                padding: 5px;
                text-align: center;
                font-size: 20px;
                font-weight: bold;
                letter-spacing: 0.2em;

            }

            td,
            th {
                border-collapse: collapse;
                border: thin solid;
                background-color: #FFEFD5;
            }

            td.tdlinks {
                text-align: left;
            }

            hr {
                height: 14px;
                margin-left: 2px;
                box-shadow: 3px 3px 3px rgb(0 0 0 / 60%);
            }

            .laenge1 {
                background-color: green;
                color: white;
                border: 1px solid black;
                box-shadow: 3px 3px 3px rgb(0 0 0 / 60%);
            }

            .laenge2 {
                background-color: yellow;
                border: 1px solid black;
                box-shadow: 3px 3px 3px rgb(0 0 0 / 60%);
            }

            .laenge3 {
                background-color: orange;
                color: black;
                border: 1px solid black;
                box-shadow: 3px 3px 3px rgb(0 0 0 / 60%);
            }

            .laenge4 {
                background-color: red;
                color: white;
                border: 1px solid black;
                box-shadow: 3px 3px 3px rgb(0 0 0 / 60%);
            }

            #spalte1 {
                width: 325px;
                background-color: #B0E2FF;
            }

            #spalte2 {
                width: 55px;
                background-color: #B0E2FF;
            }

            #spalte3 {
                background-color: #B0E2FF;
            }

            span {
                display: inline-block;
            }

            .gesamtklicks {
                border: 1px solid black;
                padding: 3px 0;
                margin: 0 2px;
                margin-bottom: 10px;
                margin-right: 610px;
                background-color: #B0E2FF;
                width: 99.5%;
                text-align: center;
                white-space: pre;
                box-shadow: 3px 3px 3px rgb(0 0 0 / 60%);
            }

            table tr:hover td {
                background-color: white;
            }
        </style>

    </head>

    <body>
        <?php
        
    /* Zählt alle Dateien incl. allen Dateien in Unterordnern
    * php-einfach.de/experte/codeschnipsel/14082-alle-dateien-und-ordner-in-einem-verzeichnissen-zaehlen
    * $dir => Hier wird der Grundpfad angegeben
    *
    *********************************************************/
        
    function filecounter($dir)
        {
            
    $dirs  0;    // Variable für die Verzeichnisse
            
    $files 0// Variable für die Dateien
            
    $path scandir($dir);    // Gibt den Inhalt des ganzen Verzeichnisses in einem Array wieder
            
    foreach ($path as $file) { // Wiederhole den Vorgang solange bis jedes Element des Arrays "$path" überprüft wurde
                
    if ($file != '.' && $file != '..') { // Ignoriert die Elemente "." und ".."
                    
    if (is_dir($dir '/' $file)) {    // Prüft ob es sich um ein Verzeichnis handelt
                        
    $dirs++; // Inkrementiert $dirs um 1
                        
    $back     filecounter($dir '/' $file); // Zählt alle Dateien und Verzeichnisse in diesem Verzeichnis. Wiederholt sich solange wie es Unterverzeichnisse gibt.
                        
    $dirs  += $back[0];    // Inkrementiert $dirs mit der Anzahl der Ausgewerteten Verzeichnisse durch "count_subdirectory"
                        
    $files += $back[1]; // Inkrementiert $files mit der Anzahl der Ausgewerteten Dateien durch "count_subdirectory"
                    
    } elseif (is_file($dir '/' $file)) { // Prüft ob es sich um eine Datei handelt
                        
    $files++; // Inkrementiert $files um 1
                    
    }
                }
            }
            
    $rtn = array($dirs$files); // Erstelle ein Array aus den beiden Werten
            
    return $rtn// Gebe das Array zurück
        
    }
        
    // auslesen der Dateien und gesamt Klicks zählen
        
    $verzeichnis 'statistics';
        
    $anzahl filecounter($verzeichnis); // aus Funktion - code-schnipsel - funktion-anzahl-bilder.php
        
    $dateien $anzahl[1];
        
    $gesamt 0;
        
    $max 0;
        
    // -- Anzahl der Dateien im Ordner --
        
    $pt dirname(__FILE__) . "/statistics";
        
    $fn scandir($pt);
        foreach (
    $fn as $k => $val) {
            if (
    $val != "." && $val != "..") {
                
    $teilung explode("."$val);
                
    $inhalt file_get_contents("$pt//$val"); // so kannst du dateien öfnen
                
    $gesamt $gesamt $inhalt;
                if (
    $max $inhalt) {
                    
    $max $inhalt// gesamt Klicks aus allen Dateien
                
    }
            }
        }
        
    //-- Original --
        
    $pt dirname(__FILE__) . "/statistics";
        
    $fn scandir($pt);
        
    $x 1;
        echo 
    '<div class="inhalt">';
        echo 
    '<p class="ueberschrift">Butten Klick Statistik</p>';
        echo 
    '<table>';
        echo 
    '<tr><th id="spalte1">Datei Name</th><th id="spalte2">Klicks</th><th id="spalte3">Anzeige</th></tr>';
        foreach (
    $fn as $k => $val) {
            if (
    $val != "." && $val != "..") {
                echo 
    '<tr><td class="tdlinks">' sprintf('%02d'$x) . ' - ';
                
    $x $x 1;
                
    $teilung explode("."$val);
                
    /* echo $val; */ // Dateiliste
                
    echo $teilung[0];
                echo 
    '</td>';
                
    $inhalt file_get_contents("$pt//$val"); // so kannst du dateien öfnen
                
    echo '<td>';
                echo 
    $inhalt;     // datei inhalte werden ausgegeben ..
                
    echo '</td>';
                echo 
    '<td>';
                
    $laenge = (800 $max) * $inhalt// laenge 800 = maximal Anzeigenlänge abgängig von der Tabellenbreite
                
    if ($laenge >= 600) {
                    
    $id 1// grün
                
    }
                if (
    $laenge >= 400 and $laenge 600) {
                    
    $id 2// gelb
                
    }
                if (
    $laenge >= 200 and $laenge 400) {
                    
    $id 3// orange
                
    }
                if (
    $laenge 200) {
                    
    $id 4// rot
                
    }
                echo 
    '<hr class="laenge' $id '" style="width:' $laenge 'px;text-align:left;">';
                echo 
    '</td></tr>';
            }
        }
        
    $a round($max 100 251);
        
    $aa $a 0.1;
        
    $b round($max 100 25 21);
        
    $bb $b 0.1;
        
    $c round($max 100 25 31);
        
    $cc $c 0.1;
        echo 
    '</table>
        <p><span class="gesamtklicks">Gesamt Klicks: ' 
    $gesamt '    /    Beste Seite Klicks: ' $max '    /    Gesamt Seiten: ' $anzahl[1] . '</span><br>
        <span class="laenge4" style="width:24%">0% - 25%  /  0 - ' 
    $a ' Klick</span>
        <span class="laenge3" style="width:25%">25% - 50%  /  ' 
    $aa ' - ' $b ' Klick</span>
        <span class="laenge2" style="width:25%">51% - 75%  /  ' 
    $bb ' - ' $c ' Klick</span>
        <span class="laenge1" style="width:24%">76% - 100%  /  ' 
    $cc ' - ' $max ' Klick</span></p>
        </div>'
    ;

        
    ?>
    </body>

    </html>
    Zuletzt geändert von eloms; 27.11.2022, 19:38.

  • #2
    Hallo

    Ich habe mal die Anzeige erweitert

    mfg
    Michael

    Kommentar


    • #3
      Ich denke, wenn ich mir den Code hier in deinem ersten Posting ansehe, verstehe ich, was Du vor hast.
      preg_replace kann dein Problem lösen, siehe hier:
      https://www.php.net/manual/de/function.preg-replace.php
      In diesem Fall brauchst Du gar keine komplizierte Regex sondern nur das ".*":
      PHP-Code:
      $finden = array(
            
      '/monat\.php.*/'
      ); 
      Die anderen Begriffe ebenfalls in Schrägstriche einschließen.
      Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
      (Andre Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)

      Kommentar


      • #4
        Hallo

        Danke für die Info
        Das mit diesen vielen / \ * muss ich erst ein mal verstehen.
        In den Beispielen sieht das sehr kompliziert aus.

        mfg
        Michael

        Kommentar


        • #5
          Wenn Du es verstehen möchtest, kannst Du es hier ausprobieren:
          https://regex101.com
          und bekommst Erklärungen, was die einzelnen Zeichenkombinationen bedeuten.
          Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
          (Andre Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)

          Kommentar


          • #6
            Hallo

            Ok, Danke
            Schaue ich mir mal an

            mfg
            Michael

            Kommentar


            • #7
              Warum muss das aktuelle Datum überhaupt als Parameter übergeben werden?

              Kommentar


              • #8
                Zitat von bdt600 Beitrag anzeigen
                Warum muss das aktuelle Datum überhaupt als Parameter übergeben werden?
                Hallo

                Weil damit die Anzeige und Navigation der Web Cam Bilder erzeugt wird.
                Steht da 2020-01-01 wird auch genau der Monat angezeigt.

                Was ich bis jetzt aber fest gestellt habe ist, das Besucher die Seite aus dem Cache oder einem "Falschen" Lesezeichen aufrufen.
                Dadurch gibt es mehrere Anzeigen für ein und die selbe Seite.



                mfg
                Michael
                Zuletzt geändert von eloms; 27.11.2022, 19:39.

                Kommentar


                • #9
                  Hallo

                  Ich wollte mal ein Fazit des Zählers abgeben.
                  Es Funktioniert gut und man kann die Klicks der einzelnen Seiten gut auswerten.
                  Für das was ich möcht ist es völlig ausreichend.

                  Aber
                  1. Man sollte sich vorher genau Überlegen welche Seiten überwacht werden sollen, denn die oben genannten klicks Post 8, entsehen dadurch, das ich Seiten geändert habe und nicht mehr existieren.
                  Da aber im Browser oder als Lesezeichen der Link beim Besucher noch aktiv ist, werden natürlich auch diese klicks gespeichert.
                  Eine nachträgliche Änderung bringt auf jeden Fall ein durcheinander in der Auswertung.

                  2. Wenn der Klickzähler außer Betrieb genommen werden soll, da man ihn villeicht nicht mehr benötigt, kann man die Auswertunsseite auf die umgeleitet wird nicht einfach löschen.
                  Dann läuft der Besucher ins leere. Da muss eine Infoseite geschaffen werden um den Besucher drüber zu Informieren, das sich die Seite geändert hat. ( 404 )

                  2. Es gibt klick unterschiede zwischen dem Monat und den Gesammt Klicks der einzelnen Seiten.
                  Entweder habe ich da noch ein Problem mit der Auswertung oder vielleicht haben gerade 2 Besucher gleichzeitig den gleichen Butten betätigt.

                  Auf dem Bild habe ich schon mehr mals etwas gelöscht, ist also nicht aktuell.
                  Und die Startseite wird eigentlich nicht mehr gezählt, wird aber immer noch angezeigt.
                  Mal sehen wie ich da weiter mache.

                  mfg
                  Michael
                  Zuletzt geändert von eloms; 27.11.2022, 19:39.

                  Kommentar


                  • #10
                    Zitat von eloms Beitrag anzeigen
                    Aber
                    1. Man sollte sich vorher genau Überlegen welche Seiten überwacht werden sollen, denn die oben genannten Klicks Post 8, entstehen dadurch, das ich Seiten geändert habe und nicht mehr existieren.
                    Da aber im Browser oder als Lesezeichen der Link beim Besucher noch aktiv ist, werden natürlich auch diese Klicks gespeichert.
                    Eine nachträgliche Änderung bringt auf jeden Fall ein Durcheinander in der Auswertung.
                    Die doppelten Einträge kommern ja sicherlich so zusammen, z. B.
                    HTML-Code:
                    http://example.com
                    https://example.com
                    http://www.example.com
                    https://www.example.com
                    http://example.com/
                    https://example.com/
                    http://www.example.com/
                    https://www.example.com/
                    http://example.com/index.php
                    https://example.com/index.php
                    http://www.example.com/index.php
                    https://www.example.com/index.php
                    Das sind ja schon 12 links, die auf der gleichen Seite verweisen, die in deinem Skript auch 12 verschiedene Einträge machen.

                    Hast du mal versucht deine htaccess zu ändern, sodass deine Seite das alles umleitet?
                    Das WWW aus jeden Link entfernen
                    Seite immer auf https umleiten
                    index.php auf / umleiten , wenn möglich
                    usw...
                    Zuletzt geändert von basti1012; 12.08.2022, 11:45.
                    Erreichbar in mein Javascript-Forum und in ?Facebook-Chat

                    Kommentar


                    • #11
                      Hallo

                      Nein, da feht etwas entscheidendes, seite.php?id=
                      Eine index.php oder ähnliches wird nicht gezählt, aber eine seite.php?id=index.php wird gezählt und daraus wird dann eine index.php.txt mit der Anzaht von Klicks erstellt. Ich mache mit suchen und ersetzen aber eine Startseite.txt daraus.

                      Wie ich ja schon geschrieben habe, ist das aber nicht so schön und meine Idee ist,
                      um bei der Startseite zu bleiben, die index.php in index.php?seite=startseite umzubenennen.

                      Die Auswertung wird dann vor dem head gemacht und die Variable(n) verarbeitet.
                      Das kann dann auch für immer so bleiben, auch wenn ich es nicht mehr auswerten möchte.

                      Aktuell gibt es eine gb.txt, das war mal bis vor ca. 2 Wochen eine Gästebuch Testseite die nicht mehr Aktiv ist.
                      Das kann aus meiner Sicht nur mit einem falschen Lesezeichen, dem Browser Cache oder Google Indizierung zusammen hängen.

                      mfg
                      Michael

                      Kommentar


                      • #12
                        Hi,
                        Zitat von eloms Beitrag anzeigen
                        Wie ich ja schon geschrieben habe, ist das aber nicht so schön und meine Idee ist,
                        um bei der Startseite zu bleiben, die index.php in index.php?seite=startseite umzubenennen.
                        warum nicht einfach "/" für die Startseite und z.B. "/?seite=news"? Wobei ich "/?news" noch eleganter fände.

                        Gruß
                        Ingo

                        Ingo Webdesign

                        Kommentar


                        • #13
                          Hallo

                          Danke für die Info,
                          aber da stehe ich gerade auf dem Schlauch.
                          Ich verstehe da gerade den Zusammenhang nicht.

                          War das so gemeinet?
                          index.php/?seite=startseite

                          oder bezieht es sich auf das "die index.php in index.php?seite=startseite umzubenennen"
                          damit ist der Button in der Navigatino gemeint. Also jeder Button bekommt eine zusätzliche Variable. Einige haben ja schon welche die ich zum Anzeigen benötige.

                          mfg
                          Michael

                          Kommentar


                          • #14
                            Du weißt aber schon, dass dein Counter total leicht zu manipulieren ist? Ich rufe eine Seite auf und tippe mehrfach die F5-Taste und schon stimmt dein Counter nicht mehr. Außerdem würde ich so etwas mit einer Datenbank umsetzen und mir das Gehampel mit Dateien ersparen.

                            Kommentar


                            • #15
                              Hallo

                              Wozu der Aufwand mit einer Datenbank und das könnte ich auch gar nicht, da fehlt mir das Wissen.
                              Ich werde sowiso alte Daten ab und zu löschen, was interessiert mit ein Klick aus 2021?
                              Ich möcht lediglich erfahren welche Seiten besucht werden und kann so entscheiden was den Besucher Interessiert und was nicht und ggf. etwas ändern.
                              Ich möcht auch nichts großartig Installieren und einrichten.

                              Und wieviele Besucher drücken den die F5 Taste? Die meisten wissen doch garnicht was das ist.

                              Und ein "Gehampel" ist das auch nicht, ich habe alt Spass das zu Testen und wenn es Funktioniert ist doch alles gut.

                              Für die Profis wie Du ist das natürlich nichts.

                              Du weißt aber schon, dass dein Counter total leicht zu manipulieren ist? Ich rufe eine Seite auf und tippe mehrfach die F5-Taste und schon stimmt dein Counter nicht mehr.
                              Das ist Falsch!
                              Mir ist da gerade noch etwas eingefallen.
                              Du hast das Skript nicht richtig verstanden.
                              Und wenn Du 100 mal F5 drückst passiert nichts, rein gar nichts.

                              mfg
                              Michael
                              Zuletzt geändert von eloms; 13.08.2022, 17:22.

                              Kommentar

                              homepage-forum.de - Hilfe für Webmaster! Statistiken

                              Einklappen

                              Themen: 57.136   Beiträge: 431.982   Mitglieder: 29.471   Aktive Mitglieder: 67
                              Willkommen an unser neuestes Mitglied, RiomondDem.

                              Online-Benutzer

                              Einklappen

                              158 Benutzer sind jetzt online. Registrierte Benutzer: 3, Gäste: 155.

                              Mit 3.502 Benutzern waren am 23.01.2020 um 18:20 die meisten Benutzer gleichzeitig online.

                              Die neuesten Themen

                              Einklappen

                              Die neuesten Beiträge

                              Einklappen

                              Lädt...
                              X