IP für Zeitraum sperren?

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

  • IP für Zeitraum sperren?

    Hallo zusammen,

    auf meiner Seite habe ich ein Toplisten-Skript, welches die Besucher zählt, die andere von ihren Seiten auf meine Seiten schicken.

    Da es immer wieder mal vorkommt, dass jemand seine Seite mutwillig nach oben klickt, möchte ich eine IP, die meine Seite besucht hat, für 10 Minuten sperren.

    Dazu habe ich mir folgenden Code überlegt. Zum einen kommt mir dieser Code aber fürchterlich umständlich vor, hat jemand eine Idee, wie es einfacher gehen könnte? Und zweite Frage: Welchen Datentyp und welche timefeld müßten denn die Felder ip und zeit haben?

    PHP-Code:
    #Ermitteln der Referenz-URL

    $stehenlassen 600;

    $url_info parse_url($HTTP_REFERER);
    $ip $HTTP_SERVER_VARS["REMOTE_ADDR"];

              
    $zeit time ();

              
    $nichtmehrgueltig $zeit-$stehenlassen;

              
    $query3 "DELETE FROM iptest WHERE timefeld <= ".$nichtmehrgueltig;

         
    mysql_query($query3,$link);

              
    $query2 "SELECT * FROM iptest WHERE ip = '".$ip."'";

              
    $result2 mysql_query($query2,$link);

              
    $rows mysql_num_rows($result2);

              
              
    #Nun schauen wir ob $rows >= 1 ist,....

              
    if ($rows >= 1) {}

        else {

        
    $query4 "INSERT INTO iptest (ip,timefeld) VALUES ('$ip',$zeit)";

              
    mysql_query($query4,$link);

            @
    mysql_query ("update sites set click_in=click_in+1 where url='$url_info[host]'");

            } 
    Danke im voraus und viele Grüße
    langerxxx

  • #2
    Re: IP für Zeitraum sperren?

    Zum einen kommt mir dieser Code aber fürchterlich umständlich vor, hat jemand eine Idee, wie es einfacher gehen könnte?
    naja.. geht doch... hab schon viel schlimmeres gesehen. höchstens die mysql-querys könntes du zusammenfassen:

    PHP-Code:
    $query3 "DELETE FROM iptest WHERE timefeld <= ".$nichtmehrgueltig;
    mysql_query($query3,$link);

    ==> 
    mysql_query("DELETE FROM..... 
    Welchen Datentyp und welche timefeld müßten denn die Felder ip und zeit haben?
    öhmm ich würd' da zwei mal varchar nehmen
    Der Programmierer ist der Vormund des Anwenders.

    Kommentar


    • #3
      für eine in einer db gespeicherte zeit würd ich einen typ benutzen, der dafür vorgesehen ist, notfalls noch int aber niemals varchar!? wie kommst du darauf?
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        vielleicht deswegen weil varchar / text alles annimt ?

        Kommentar


        • #5
          Hallo zusammen,

          schon mal danke für eure Hinweise.
          Hat noch jemand einen Syntax-Fehler entdeckt oder sollte das so funktionieren?! Gibt es eigentlich eine PHP-Funktion, die vielleicht den Code etwas entschlaken würde?

          Danke und Gruß
          langerxxx

          Kommentar


          • #6
            Hat noch jemand einen Syntax-Fehler entdeckt oder sollte das so funktionieren?!
            frag deinen parser ...

            Gibt es eigentlich eine PHP-Funktion, die vielleicht den Code etwas entschlaken würde?
            hier im forum wird immer wieder auf die function think() verwiesen, ....
            die sache läßt sich aber imho noch extrem vereinfachen, ...
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              Hallo der Hund:

              Verrätst du mir auch, wie sich der die Sache noch extrem vereinfachen läßt?

              Danke schonmal!

              cu
              langerxxx

              Kommentar


              • #8
                ja,

                wenn dein code die sache so löst ist doch ok, ...

                ich würde auch nur einige umwege entfernen, so daß du im endeffekt nur ein paar zeilen sparen würdest, ... muß also mein vorherige aussage revidieren ...

                paßt schon so ...
                nimm DATETIME als typ fürs datum ... und dann INTERVAL in der query ...
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  Ein paar Zeilen wären schon super. Das Ganze ist direkt in meiner Startseite integriert, da würden auch ein paar Zeilen weniger schon helfen.

                  Wäre super nett, wenn du mir den Code mal posten könntest. Bin in PHP noch nicht so fit und lerne auch gerne im "eleganteren" Programmieren etwas dazu.

                  Danke schonmal im voraus!

                  cu
                  langerxxx

                  Kommentar


                  • #10
                    so. jetzt habe ich es mal kürzer (zumindest übersichtlicher) gemacht.

                    PHP-Code:
                    $stehenlassen 600;

                    // was machst du hier?
                    $url_info parse_url($HTTP_REFERER);

                    $ip $HTTP_SERVER_VARS["REMOTE_ADDR"];

                    $res mysql_query("DELETE FROM
                                            iptest
                                        WHERE timefeld < DATE_SUB(NOW(), INTERVAL "
                    .$stehenlassen." SECOND)")
                                or die(
                    mysql_error());

                    $res mysql_query("SELECT * FROM iptest WHERE ip = '".$ip."'")
                                or die(
                    mysql_error());
                              
                    if (
                    mysql_num_rows($res) == 0)
                    {
                        
                    $res mysql_query("INSERT iptest SET
                                                ip = '"
                    .$ip."', timefeld = NOW()")
                                    or die(
                    mysql_error());
                        
                    $res mysql_query("UPDATE sites SET
                                                click_in = click_in + 1
                                            WHERE url = '"
                    .$url_info['host']."'")
                                    or die(
                    mysql_error());

                    das feld timefeld in deiner db sollte jetzt vom type DATETIME sein. also bitte ändere es ggfls.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      @Abraxax:

                      $url_info = parse_url($HTTP_REFERER);
                      -> ermittelt die Adresse, von der der Besucher auf meine Seite gekommen ist.

                      Vielen Dank für den Code, schön übersichtlich und funktioniert wunderbar!




                      cu
                      langerxxx

                      Kommentar

                      Lädt...
                      X