Counter nicht weiterzählen bei Klick auf

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

  • Counter nicht weiterzählen bei Klick auf

    Tach hier!

    Meine Homepage besteht aus insgesamt 6 html-documenten und ist gänzlich auf Tabellen aufgebaut. In der IndexStart.htm habe ich einen Counter eingebaut der wunderbar funtzt. Das Problem ist nur, dass der Counter auch weiterzählt wenn man von irgendeiner Seite wieder auf die Startseite zurück-klickt weil sich ja bei Tables das komplette htm-docu wieder neu reinlädt.
    Kann mir jemand Abhilfe verschaffen wie sich das verhindern läßt????

    hier der php-counter-code:
    <?php
    $file = "counter/counter.txt"; // Dateizuweisung
    $ftp = @fopen($file,"r+"); // oeffnet die Datei
    $count = (int)fgets($ftp,50); // Holt die ersten 50 Zeichen
    $count++; // Addiert eine 1
    rewind($ftp); // Setzt Zeige auf 0. Position
    fwrite($ftp,$count); // Schreibt
    fclose($ftp); // Schliesst die Datei

    for ($i = 1; $i <= strlen($count); $i++) //zaehlt die Anzahl der Zeichen
    {
    $zahl = substr($count, $i - 1, 1); //1.-n Zeichen werden einzeln gelesen
    for ($z = 0; $z < 10; $z++)
    {
    if ($zahl == $z) //das Zeichen wird eine Grafik eingesetzt
    {
    echo "<IMG SRC=counter/$z.gif WIDTH=15 HEIGHT=20 BORDER=0 ALT=$z>";
    }
    else{echo "";}
    }
    }
    ?>
    $PHP resource 4ever$

  • #2
    du kannst mittels dem Referer feststellen, woher jemand kommt. Da kannst du also deine eigenen Skripte abfangen und nicht zählen:
    Code:
    if (!strstr("http://www.meine_adresse.de/pfad",getenv(HTTP_REFERER))) {
    
    // hier der Code für Counter....
    
    }
    in der if-Abfrage wird also geprüft, ob ein gewisser Teilstring vorkommt. Wenn dieser NICHT vorkommt, dann führt er die Anweisung aus. Ansonsten eben nix.
    zweite Möglichkeit wäre noch ein Cookie, aber das oben ist eleganter...


    P.S.: Uoops, natürlich muß strstr genau andersrum sein, also zuerst die Variable und dann der Suchstring strstr(getenv(HTTP_REFERER),"http://www.mei....")

    [Editiert von BrainBug am 24-07-2001 um 08:54]

    Kommentar


    • #3
      BrainBug, meinst Du das so:

      <?php
      if strstr(getenv(HTTP_REFERER),"http://www.meine_adresse.de/pfad") {

      $file = "counter/counter.txt"; // Dateizuweisung
      $ftp = @fopen($file,"r+"); // oeffnet die Datei
      $count = (int)fgets($ftp,50); // Holt die ersten 50 Zeichen
      $count++; // Addiert eine 1
      rewind($ftp); // Setzt Zeige auf 0. Position
      fwrite($ftp,$count); // Schreibt
      fclose($ftp); // Schliesst die Datei

      for ($i = 1; $i <= strlen($count); $i++) //zaehlt die Anzahl der Zeichen
      {
      $zahl = substr($count, $i - 1, 1); //1.-n Zeichen werden einzeln gelesen
      for ($z = 0; $z < 10; $z++)
      {
      if ($zahl == $z) //das Zeichen wird eine Grafik eingesetzt
      {
      echo "<IMG SRC=counter/$z.gif WIDTH=15 HEIGHT=20 BORDER=0 ALT=$z>";
      }
      else{echo "";}
      }
      }

      }
      ?>

      Was genau meinst Du mit: es wird ein Teilstring geprüft??
      Was macht der Referer?? Checkt der, ob der User mit der IP bla bla bla schon mal da war, oder wie??
      Noch was: Meinst Du mit pfad (bei der URL) den Namen der Site??
      $PHP resource 4ever$

      Kommentar


      • #4
        nee, die If-Abfrage ist nicht ganz richtig:
        Code:
        <?php 
        if (!strstr(getenv(HTTP_REFERER), "http://www.meine_adresse.de") { 
        
        $file = "counter/counter.txt"; // Dateizuweisung 
        $ftp = @fopen($file,"r+"); // oeffnet die Datei 
        $count = (int)fgets($ftp,50); // Holt die ersten 50 Zeichen 
        $count++; // Addiert eine 1 
        rewind($ftp); // Setzt Zeige auf 0. Position 
        fwrite($ftp,$count); // Schreibt 
        fclose($ftp); // Schliesst die Datei 
        
        for ($i = 1; $i <= strlen($count); $i++) //zaehlt die Anzahl der Zeichen 
        { 
        $zahl = substr($count, $i - 1, 1); //1.-n Zeichen werden einzeln gelesen 
        for ($z = 0; $z < 10; $z++) 
        { 
        if ($zahl == $z) //das Zeichen wird eine Grafik eingesetzt 
        { 
        echo "<IMG SRC=counter/$z.gif WIDTH=15 HEIGHT=20 BORDER=0 ALT=$z>"; 
        } 
        else{echo "";} 
        } 
        } 
        
        } 
        ?>
        in der If-Abfrag sollte der Teil mit "http://..." eben die Adresse/URL sein, unter der deine Seite zu erreichen ist. Referer ist die Seite/Dokument/Server, wo der User herkommt, d.h. wenn ich bei Yahoo auf einen Link klicke, der zu deiner Seite führt, dann habe ich in dem Moment http://www.yahoo.de/... als Referer. Wenn ich dann allerdings bei dir auf der Site rumklicke und dort irgendwann auf "Home" oder so klicke, dann habe ich ja mittlerweile den Referer http://www.meine_adresse.de - bzw. noch genauer: wenn ich dann auf der Seite "keineahnung.html" bin und dort klicke, dann wird auf der Folgeseite der Referer "http://www.meine_adresse/keineahnung.html" sein.
        Und hier kommt nun strstr() ins spiel, es wird hier nämlich geschaut, ob ein gewisser Teilstring im Gesamtstring vorkommt -> Teilstring wäre hier "http://www.meine_adresse.de" und der Gesamtstring ist der Referer. Also, alle die von deiner Site auf deine Site kommen (z.B. über Home-Button) werden entdeckt und nicht gewertet.

        Kommentar


        • #5
          Aha, jetzt wird mir einiges klar.
          Meine Site ist allerdings auf Tables aufgebaut. Auf der StartTable.htm befindet sich der Counter. Wenn der User nun auf einen Link bei der StartTable klickt, lädt sich ja die gewünschte Seite komplett neu rein.
          Klickt der User von dort auf "Home" dann kommt er wieder auf die StartTable.
          In diesem Fall soll der Counter natürlich nicht weitergezählt werden, sondern nur dann, wenn die Site WIRKLICH aufgerufen wurde.
          Verstehst Du?? Is nämlich gar nicht so einfach zu formulieren.
          $PHP resource 4ever$

          Kommentar


          • #6
            Hmmm, kurze Zusammenfassung:

            deine Startseite heisst StartTable.htm, und wenn du da auf einen Link (also eine Unterseite) klickst, dann wird ??? wieder die StartTable.htm mit anderem inhalt geladen oder wie. Oder heisst die Seite dann von mir aus FolgeTable.htm?? Wenn zumindest die Seite anders heisst, dann kannst du auch den Referer feststellen. Wenn du allerdings z.B. ein Frameset hast mit einer Navigation im "äußeren" Frame, dann hilft das alles nix.
            Dann mußt du entweder über Cookies dir merken, das jemand schon die Site betreten hat (bei abgeschalteten Cookies hinfällig), oder immer ein Parameter mitschleifen (geht gerne mal verloren bei mehreren Seiten) oder aber (bester Weg) über Session-Variablen dir das merken (PHP-Variante)

            Kommentar


            • #7
              Die Startseite heißt StartTable.htm
              Klickt der User dort auf einen Link dann lädt sich die Folgeseite (zB MyHobbys.htm). D.h. dass die StartTable (die mit dem Counter) gänzlich verlassen wird.

              Meiner Meinung nach müßte das dann auch mit dem Referer funken. Denn auch dann ändert sich die URL (zumindest die htm davon) und damit ist der Prüf-String wieder anders als die Startseite.

              P.S.: Kannst du nochmal in die PHP-Sektion schauen. Hab dort noch ein kleines Problemchen mit meiner Highscoretabelle (Beitrag: spezielle Variablenausgabe (Teil3). Es kann mir niemand außer Dir helfen weil keiner die ersten beiden Teile mitverfolgt hat.
              $PHP resource 4ever$

              Kommentar


              • #8
                Ach so, ich dachte, du willst mir erzählen, daß die Referer-Variante bei dir NICHT geht. Na dann bin ich beruhigt...

                ... zu deinem anderen Problem, bei dem nur ich helfen kann -> werde ich mir später anschauen, hab gerade viel um die Ohren...

                Kommentar


                • #9
                  Ok. Alles klar. Ich spiele die Site höchstwahrscheinlich morgen auf den Server. Dann werde ich genau testen, ob das mit dem Referer funkt.
                  $PHP resource 4ever$

                  Kommentar


                  • #10
                    setz ein cookie, das nach nem von dir ausgesuchten zeitraum (ich nehme 24 stunden für meinen counter) automatisch wieder gelöscht wird.
                    die update-routine greift dann via if nur, wenn das cookie noch nicht da ist und setzt es dann. wenn bereits eines da ist, macht sie gar nichts.

                    CAT Music Files

                    Kommentar


                    • #11
                      ???

                      und wenn jemand nach zwei Stunden zurückkommt? Und wenn jemand Cookies deaktiviert hat? Und wenn jemand den Browser 2 Tage offen läßt auf der Site und dann dort auf Home klickt?
                      Ne, Cookies decken nicht alles ab.

                      Kommentar

                      Lädt...
                      X