Announcement

Collapse
No announcement yet.

PHP-Besucherzähler/Logfile

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP-Besucherzähler/Logfile

    Guten Tag,

    in meine Homepage möchte ich einen Besucherzähler einbinden.
    Dieser sollte so aussagefähig sein, meine eigenen Besuche (reine
    Wartungszwecke) auf der Homepage NICHT mitzuzählen. Eine
    if-Abfrage sollte das Hochzählen zulassen, wenn nicht "ich" der
    Besucher sein sollte.
    -----------------------------------------------------------------------
    Frage: Wie könnte die if-Abfrage zweckmäßig aussehen?
    -----------------------------------------------------------------------
    DIe IP-Remote-Adresse ist kein persönliches Identif.merkmal.
    Wie könnte ich das Linken auf meine Homepage von einer nur mir
    bekannten Vorseite als Kriterium für die if-Abfrage verwenden?
    Zwei Benutzernamen (für mich, für die anderen) in einer Passwortabfrage
    ist womöglich auch zu umständlich. Gibt's nicht eine bessere Lösung?

    MfG

    P.S.:
    Existiert in einer .php-Datei, die nicht von einem Formular auf-
    gerufen wird (an die keinerlei Parameter übergeben werden)
    die Variable $HTTP_POST_VARS ?
    Wie kann man die Nichtexistenz oder ggf. den Defaultwert dieses
    Arrays in einer if-Abfrage positiv abfragen?
    (Mit Java geht sowas alles, mit PHP kenne ich mich nicht so gut aus.)
    Zuletzt editiert von Touch and Go; 11.05.2007, 05:33.

  • #2
    Hallo,

    für einen "echten" Besucherzähler sollten ja ein paar Dinge im Ansatz berücksichtigt werden. Auf alle Fälle muß er verhindern, das jeder Aufruf den Besucherzähler hochzählt, sprich ein Nutzer klickt sich innerhalb von 5 Minuten durch 20 Seiten auf deiner HP, dann sind das ja keine 20 Besuche.
    Der Zähler sollte also auf jeden Fall die IP des Besuchers zusammen mit einem Timestamp abspeichern und dann nur hochzählen, wenn die IP noch nicht bekannt ist, bzw. der Timestamp älter als xx Minuten ist.
    Wenn du jetzt deinen Zähler mit der Möglichkeit versiehst (per Get-Parameter) das er zwar das IP-Locking vornimmt, aber unter keinen Umständen den Counter erhöht, dann brauchst du das Zähler-Script nur einmal mit diesem Parameter aufrufen und deine weitergehenden "Besuche" werden nicht gezählt.
    Weitergehend kann man den Besucherzähler auch als CSS oder JavaScriptfile "tarnen". Diese Dateien werden i.d.R. von SuMa-Robots nicht abgerufen und diese "Besuche" würden somit auch nicht gezählt werden.

    $HTTP_POST_VARS ist in PHP veraltet und sollte nicht mehr verwendet werden. Stattdessen existiert das superglobale Array $_POST. Wenn keine Werte über post übergeben wurden, dann ist dieses Array leer.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo zusammen,

      das Problem mehrerer Seiten auf einer Website ist da, aber auch wieder lösbar
      mit der IP-Adresse und Zeitstempel. Keine Frage, wenn man den Besucher-zähler schon richtig machen möchte, dann ist dieser Gesichtspunkt auch zu berücksichtigen. Danke für diesen Tip, Falk.

      Heißt superglobal, daß die Variable für alle Besucher gültig ist, oder hat jeder Besucher seine eigene Variable $_POST? Im ersten Fall wäre $_POST
      nach dem Test nur zurückzusetzen.

      In jedem Falle ist die Idee doch naheliegend, eine vordef. PHP-Variable zur Übergabe von Formulardaten darauf zu testen, ob sie leer ist ( <-- jeder Besucher) oder wie auch immer beschrieben ist ( <-- Besucher XY ).

      Ist dies eine Möglichkeit der Besucherfilterung und wie ist ein Array
      in einem PHP-Skript auf Leerheit zu testen?

      MfG

      Comment


      • #4
        Hallo,

        schaust du hier für globale vordefinierte Variablen und hier für Array-Funktionen.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Hallo Falk Prüfer,

          jede ÄNDERUNG des Counters/Logfiles muß in folgendem Block stehen:
          if ($param != filterwert) {...}

          Alles andere (Lesen des Counters aus Datei o. Schreiben in Webseite)
          muß bleiben.

          Wird die Seite per Formular aufgerufen mit (voreingestellter) Eingabe filterwert, folgt mit der Übergabe $param= $HTTP_POST_VARS['formularfeldname'];

          $param == filterwert

          --> die Seite wird mit stehendem Counter/Logfile angezeigt.

          Wird die Seite normal aufgerufen, kann $param ja nur irgendwas (was?) anderes werden als ausgerechnet filterwert

          --> Seite und Counter funktionieren normal.

          Was anderes das ist ("",0, o.ä.), das war eigentlich meine Frage gewesen. Aber es funktioniert schon auch mit meinen Bordmitteln.

          Wird die Webseite im Formular ohne den Zusatz /index.php adressiert, läuft der Zähler irgendwie doch weiter. (?????)

          Springen von u. zur Webseite im gleichen Browserfenster verändert den Zähler nicht (Browsercache?)

          Danke für die Links.

          MfG
          Zuletzt editiert von Touch and Go; 15.05.2007, 00:05.

          Comment


          • #6
            Hallo Touch and Go,

            Originally posted by Touch and Go View Post
            ... Wird die Seite per Formular aufgerufen mit (voreingestellter) Eingabe filterwert, folgt mit der Übergabe $param= $HTTP_POST_VARS['formularfeldname'];
            Also wie in meinem ersten Post schon geschrieben sollte $HTTP_POST_VARS nicht mehr verwendet werden, da es veraltet ist und mglws. in kommenden PHP-Versionen nicht mehr unterstützt wird.
            Besser ist: $param= $_POST['formularfeldname'];

            Originally posted by Touch and Go View Post
            ... Wird die Seite normal aufgerufen, kann $param ja nur irgendwas (was?) anderes werden als ausgerechnet filterwert
            ...
            Was anderes das ist ("",0, o.ä.), das war eigentlich meine Frage gewesen. Aber es funktioniert schon auch mit meinen Bordmitteln.
            Das Array $_POST ist zwar in jedem Falle definiert, aber einen Eintrag für den Key 'formularfeldname' gibt es nur, wenn auch ein entsprechendes Feld per POST übermittelt wurde. PHP wird hier eine "Warning" erzeugen, wenn das Script "normal" aufgerufen wird. (Warnings werden nur meist nicht angezeigt) Der Wert von $param ist also im "normal"-Fall undefiniert und wird von PHP je nach Kontext als '' oder 0 interpretiert.
            Sauberer wäre:
            PHP Code:
            $param = isset($_POST['formularfeldname']) ? $_POST['formularfeldname'] : null;
            ...
            if (!isset(
            $param) || $param != filterwert)  {...} 
            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Guten Tag, Falk Prüfer,

              danke für die syntaktische Hilfe:


              $param= $HTTP_POST_VARS ['formularfeldname']; =deprecated
              $param= $HTTP_POST ['formularfeldname']; =mein Schreibfehler zwischendurch
              $param= $_POST ['formularfeldname']; =richtig



              Wenn man jetzt noch das hässliche Formular komplett in den Papierkorb schiebt, genügen folgende Änderungen:


              1. ?formularfeldname=filterwert an die URL anhängen

              2. Weitergabe Formularvariable an PHP-Variablle:

              $param= $HTTP_GET_VARS ['formularfeldname']; geht auf jeden Fall
              $param= $_GET ['formularfeldname'];

              oder GET statt POST in deiner ternären Zuweisung.

              Auch wenn Das Laden der Seite etwas langsamer geht, kann sich das
              Ergebnis, denke ich, sehen lassen.

              Danke für deine Geduld!

              MFG

              Comment

              Working...
              X