Ankündigung

Einklappen
Keine Ankündigung bisher.

ein einfacher counter mit reload-/IP-sperre, basierend auf MySQL

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ein einfacher counter mit reload-/IP-sperre, basierend auf MySQL

    steht die webseite, möchte man wissen, wie viele user schon darauf zugegriffen haben, bzw. werden, um statistiken zu bilden.
    in meinem tutorial möchte ich euch einen sehr einfachen counter mit reaload- und IP-sperre vorstellen.

    zuerst benötigt man eine tabelle in einer datenbank, wo die zugriffe abgespeichert werden:

    counter.sql
    Code:
    CREATE TABLE zugriffe
        (
        z_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        z_ip VARCHAR(50) NOT NULL,
        z_datum VARCHAR(20)
        );
    nachdem die tabelle steht, muss zur datenbank verbindung aufgenommen werden, vorher aber erst konfigurationsdaten ageben:

    config.inc.php
    PHP-Code:
    <?php
    //eine variable als array deklarieren, um mehrere werte in einem zusammenzufassen
    $_access = array();

    $_access['host'] = 'localhost'//kann abweichen, ist aber meistens "localhost"
    $_access['user'] = ''//der benutzername
    $_access['pass'] = ''//das passwort
    $_access['name'] = ''//der name der datenbank
    ?>
    jetzt noch die verbindung schreiben:

    connect.inc.php
    PHP-Code:
    <?php
    if(!$conn mysql_connect($_access['host'], $_access['user'], $_access['pass']))
        {
        echo 
    'verbindung zu '.$_access['host'].' fehlgeschlagen';
        exit();
        }

    if(!
    $db_select mysql_select_db($_access['name']))
        {
        echo 
    'die erforderliche datenbank antwortet nicht';
        exit();
        }
    ?>
    nun das zählerskript, das eigentlich relativ simpel gebaut ist:

    counter.php
    PHP-Code:
    <?php
    //konfiguration und verbindungsdaten holen
    include_once('config.inc.php');
    include_once(
    'connect.inc.php');

    //abfrage des aktuellen status der bestehenden IPs
    $result mysql_query("SELECT z_ip FROM zugriffe WHERE z_ip = '".$_SERVER['REMOTE_ADDR']."' ") or die(mysql_error());

    //ist die aktuelle IP bereits vorhanden?
    if(mysql_num_rows($result) != 1)
        {
        
    //noch nicht? dann eintragen...
        
    $sql =     "    INSERT INTO
                    zugriffe VAULES
                        (
                        '',
                        '"
    .$_SERVER['REMOTE_ADDR']."',
                        '"
    .date('d m Y')."'
                        )
                "
    ;
        
        
    mysql_query($sql) or die (mysql_error());
        }
            else
                {
                
    //doch schon drin? dann ignorieren...
                
    exit();
                }
    ?>
    zum anzeigen der zugriffe ist folgendes skript zuständig (kann selbstverständlich noch ausgebaut und mit passwortabfrage ausgestattet werden):

    zugriffe.php
    PHP-Code:
    <?php
    //konfiguration und verbindungsdaten holen
    include_once('config.inc.php');
    include_once(
    'connect.inc.php');

    $result mysql_query("SELECT z_ip FROM zugriffe")or die(mysql_error());

    $zugriffe mysql_num_rows($result);

    echo 
    'zugriffe bisher: <strong> '.$zugriffe.' </strong>';
    ?>
    das wars schon.
    zur funktionsweise sei folgendes gesagt:
    die erste SQL-abfrage ruft die tabelle auf und prüft, ob schon ein eintrag der aktuellen IP besteht.
    wenn nicht, wird mit der zweiten aufforderung ein datebnakeintrag befohlen, der die IP des clients und dats datum einträgt.
    ist der eintrag jedoch schon vorhanden, bricht das skript ab.

    sollte irgendetwas unklar sein, berichtet es mir und ich werde es editieren.

    Nils aka XraYSoLo

  • #2
    also wenn ich mir das jett so anschaue, dann wird jede IP nur einmal gezählt... aber für IMMER, oder?

    Wäre es nicht schlauer noch eiene Zeitabfrage mit einzubinden, (z.B. ist die IP schon länger als 2h eingebuden)? Denn sonst wird der nächste Besucher mit der IP ja nicht gezählt.

    Ausserdem, nur um die reinen Besucher zu zählen, ist es wie mit Kanonen auf Spatzen zu schießen, wenn man mit einer MySQL DB arbeitet, oder nicht? Aber für eine eventuell darauf aufbauende Statistik-Software ist das vielleicht schonmal ein guter Ansatz.

    Kommentar


    • #3
      also bei einwahlzugängen wie T-DSL, ADSL oder sonst was bekommste ja alle vier stunden 'ne neue IP .
      und da das nahezu jeder nutzt, seh' ich da selber keine komplikationen.

      Nils aka XraYSoLo

      Kommentar


      • #4
        gedanken experiment:

        ich gehe auf den counter mit der ip 84.12.34.55 und disconecte. was passiert mit der freigewordenen IP? richtig mein nachbar bekommt sie (oder jemand in münchen - auf jeden fall einer der mit-kunden meines provider, der sich dann einwählt) - er geht mit 84.12.34.55 auf den counter - und wir d nicht gezählt ...

        Kommentar


        • #5
          na ja, so drastisch sehe ich das jetzt nicht...

          Nils aka XraYSoLo

          Kommentar


          • #6
            Ich fände es auch besser, wenn ne Zeitschranke eingebaut werden würde. Bzw einfach bevor überhaupt überprüft wird, ob die IP schon in der DB steht alle Einträge löschen, die z.B. älter als 1 Stunde sind. Sonst wird die DB mit jedem Besucher mit ner neuen IP grösser. Bei ner viel besuchten Seite kann das dann zu ner Menge (nach 1 Stunde) total unnützer Einträge führen.

            Kommentar


            • #7
              1 Stunde seh ich zu knapp bemessen. Würde eher auf eine IP-Sperre von 8 Stunden machen (mach ich), denn der Fall, dass meine "freigegebene" IP an jemand anderen vergeben wird, der auch auf die Seite geht ist tendenziell kleiner als ob jemand mit seiner IP innerhalb von 2 Stunden öfters als einmal auf die Seite geht.

              Vor allem gibt es immer mehr Router, die 24h +/- lang im Internet bleiben (also maximum vom Provider vorgegeben bis auto disc).

              Nur meine Meinung, finde 1h zu wenig, aber keine Löschung von alten IPs ebenso schlecht

              Grüße
              Da Psy
              [I]"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)[/I]

              Kommentar


              • #8
                full ack, eine stunde ist auf jeden fall zu wenig, würde eher zu 24h tendieren, dann kann man sich zu 90% sicher sein das die user nicht doppelt gezählt werden, und dass der nächste trotzdem gezählt wird.

                und die ips danach zu löchschen bringt nebenbei noch einen performance vorteil... ist zwar bei 10 Besuchern am Tag wurscht aber wenn es ein paar Tausend sind, dann wirds interessanter - und warum nicht gleich richtig programmieren?

                Kommentar


                • #9
                  Hallo XraYSoLo,
                  ich finde dein Script echt toll nur frage ich mich wo das counter.php​ eingebunden gehört...?
                  Ich habe jetzt einmal die index-Seite wo ich den Zählerstand ausgeben lassen will, die Datenbank, config.inc.php, connect.inc.php, counter.php und zugriffe.php. counter.php hab ich schon versucht in die index einzubinden sowie in zugriffe.php und trotzdem wird mir nur angezeigt:

                  Table 'vs_design24_de.zugriffe' doesn't exist

                  Hast du eine Idee wo ich was falsch mache?

                  Kommentar


                  • #10
                    Hast du gesehen wie alt der obige Beitrag ist ?
                    Solche alten Skripte zu benutzen bringt selten etwas, da ist einfach die Zeit drüber gegangen. So sind z.B. die mysql_*-Funktionen veraltet und sollten nicht mehr benutzt werden.
                    Such dir was aktuelles!

                    Kommentar


                    • #11
                      Ja, das hab ich schon gesehen, danke, aber versuchen kann man es doch trotzdem mal und ich habe es schon mit so einigen Scripts versucht, die aber irgendwie nicht hingehaut haben... Aktuell hab ich einen ganz einfachen hingebastelt mit einer .txt-Datei jedoch ohne IP-Sperre (die ich gerne hätte und auch nicht über Datenbank)... Ich bin schon ein Weilchen raus und hab auch keinen zur Hand den ich sonst fragen könnte.

                      Kommentar


                      • #12
                        Zitat von NessisMama Beitrag anzeigen
                        Aktuell hab ich einen ganz einfachen hingebastelt mit einer .txt-Datei jedoch ohne IP-Sperre (die ich gerne hätte und auch nicht über Datenbank).
                        Dann schau mal hier rein: varCache. Der dortige Beispiel eines Besucherzählers hat leider auch keine IP-Sperre, aber es sollte nicht allzu so schwer sein diesen zu ergänzen.

                        Wenn du einen eigenen Versuch (sprich Code) zeigen möchtest und Hilfe brauchst, empfehle ich einen neuen Thread im Einsteiger-Forum aufzumachen.

                        Kommentar


                        • #13
                          Zitat von jspit
                          einen neuen Thread im Einsteiger-Forum aufzumachen
                          ... wo auch dieser hier besser aufgehoben ist.

                          [MOD: verschoben von PHP-Fortgeschrittene]

                          EDIT:

                          Ach der war ja von 2007.. ok dann bitte

                          einen neuen Thread im Einsteiger-Forum aufzumachen
                          [MOD: geschlossen]
                          The string "()()" is not palindrom but the String "())(" is.

                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar

                          Lädt...
                          X