Fehler bei scheiss IP-Sperre *grrr*

  • hi zusammen

    ich habe folgende ip sperre gebaut:

    wenn 1 zurück gegeben wird dann soll man auf ne fehlerseite kommen, wenn 0 dann solls nomal weitergehen...

    folgende kriterien damit 0 kommt:

    1. der letzte aufruf muss 24 stunden zurückliegen ($zeit)
    2. die ip muss übereinstimmen (gespeicherte mit derm vom benutzer)
    bis jetzt geht alles... jetzt soll aber noch etwas hinzukommen
    3. es soll nich nur zeit und ip gespeichert werden sondern auch eine id (integer, die beim aufruf von speziellen seiten der funktion übergeben wird)
    diese soll auch überprüft werden mit der, die in der text datei mit ip|datum gespeichert is

    das gane wird so in der textdatei abgespeichert:

    IP-Adresse|Time-Stemp|ID-Nummer

    aber es wird immer was falsches zurückgegeben, wo liegt der scheiss fehler?? help!!

  • in php-tags:

  • Moin,
    lool wie ich Textdateien hasse...
    Mit MySQL wär das viel einfacher gewesen :megalacher:
    Hatte den ganzen morgen Spaß damit nur wegen paar Konzentrationsfehlern...
    Habs ein bisschen umgeschrieben ;)

    Hoffe doch, dass es funktioniert ;)

    Gruß crAzywuLf :D

  • lol ich hasse die auch, die txt dateien, aber meine datenbank is mir für sowas zu schade :D

    thx, werde gleich ml testen

  • es funktioniert leider überhaupt nicht... es kommt immer 0 als resultat raus... :((((

  • ich kapiers echt nich.. ich habs jetzt so umgeändrt das das richtige zurückgegeben wird... ich gebe in einem array die variable $gefunden und $sel_arr[2] zurück... jetzt hab ich die variablen in dem array auch ausgegeben... wenn ich zum ersten mal was eintrage kommt 0 raus... und die ID

    und wenn ich nochmal eintragedan kommt 2 und dike idee
    und diese sceheeeiss bediengung erkenbnt den dreck nich ich weiss echt nich wiesooo
    :evil: :x :evil:

    $array_ret[0] = bei der ausgabe: 2 (wenn schon eingetragen, sonst 0)
    $array_ret[1] = is die ID

    Code
    if($array_ret[0] == 2 && $array_ret[1] == $vid)
    {
       header("Location: errors/flood.php"); 
       exit;
    }

    wieso geht der dreck nich? ich checks echt nicht emhr :x

  • juhuu hab den fehler gefunden, ich musste nur die variablen in integer parsen :)

    jetzt brauch ich aber noch ne hilfe.. wie mach ich das am besten dass bereits abgelaufene einträge in der textdatei gelöshct werden (damit die nich zu groß wird)

  • Zitat von Anonymous

    juhuu hab den fehler gefunden, ich musste nur die variablen in integer parsen :)

    jetzt brauch ich aber noch ne hilfe.. wie mach ich das am besten dass bereits abgelaufene einträge in der textdatei gelöshct werden (damit die nich zu groß wird)

    Du kannst doch die Datei einfach alle 24 Stunden oder einmal in der Woche löschen...

  • Dafür bräuchtest du einen Cronjob...
    Wenn du das ganze Script in einer Datenbank machst, ist das Problem eher klein weil die Datenbank ned wirklich so groß wird wie die Datei und viel schneller ausliest

  • Zitat von crAzywuLf

    Dafür bräuchtest du einen Cronjob...


    Nö, nicht wriklich.
    Du machst folgendes:
    Als erstes wird in einer Variable das aktuelle Datum gespeichert.
    $date = date("d");
    Dann hängst du an jede ip das datum heran, wie du es auch mit time() gemacht hast.
    Nun überprüfst du mit einer schlefie, ob das datum das richtige ist.
    Wenn nicht das ganze mit unset() löschen.

    Ist jetzt etwas auf sie schnelle erklärt, ich häng nachher nochmal nen Beispiel ran.

  • Zitat von crAzywuLf

    Dafür bräuchtest du einen Cronjob...


    Nun greif ich mal ein, sorry - aber ihr fangt an zu übertreiben.

    Du brauchst keinen Cronjob, nur etwas den Kopf einschalten:

    Wenn der User seine Daten gesendet hat, dann trägst du seine IP mit der Uhrzeit zusammen durch das die Daten empfangende (GB)PHP-Script in eine einfache Textdatei ein. Ich hab das hier mal eben aus dem Kopf geschrieben, die Scripte sind jetzt nicht auf (Tipp)Fehler getestet, da ich keine Lust hatte mir erst die entsprechenden Dateien zu erstellen.
    Falls Fehlermeldungen auftauchen, die einfach hier posten, ich bessere dann ggf. nach.

    Code
    if($send)
     {
      $SP = time()."|"$_SERVER['REMOTE_ADDR']; 
      $fp = fopen("flood.txt","a");
      flock($fp,2);
      fputs($fp,$SP);
      flock($fp,3);
      fclose($fp);
      }

    Das ist erstmal alles.

    Nun willst du beim öffnen des GB-Scriptes die Gegenprobe machen, um feststellen zu können oder der User posten darf, oder nicht. Dafür mußt du in dem Moment, wo er das Formular anfordert, seine IP und mit der Flood-Datei überprüfen. Das wiederum geschieht ambesten Datensatz für Datensatz, dann kannst du nämlich gleichzeitig alle Datensätze rausnehmen, die zeitlich abgelaufen sind. Alle noch aktuellen DS werden gesammelt und nach der Prüfung überschreibst du die Datei mit nur noch den aktuellen Datensätzen.

    Dafür fügst dafür in das GB- oder separate Formular-Script folgendes ein ich habe es mal etwas auskommentiert, damit es verständlicher wird:

    ...sollte so passen.

    G.a.d.M.

    Ronald

  • Zitat von Ronald


    Nun greif ich mal ein, sorry - aber ihr fangt an zu übertreiben.
    Du brauchst keinen Cronjob, nur etwas den Kopf einschalten:

    Zitat


    Nö, nicht wriklich.

    Jojo immer lescha,
    ich hab schon von Anfang an gesagt das ich diese TextHumbug Scripts hasse...
    DB währen wir andere Varianten eingefallen um das Prob zu beheben, geschweige das das Script nicht so doof wär...

    Gruß crAzywuLf :D

  • ich habs nich probiert, das ganze is ja scheiss kompliziert... ich werd ma crazwulf's rat folgen und das mit tabellen machen..

    aber trotzdem vielen dank.

  • Ixh nehme an, du meinst mit einer Datenbank, denn mit Tabellen kann man keine IP-Sperre erstellen.

    Wenn ud mit MySQL besser zurecht kommst, als mit einem wirklich simplen PHP-Script wie dem von mir, dann mach das. Aber auch dafür brauchst du ein PHP-Script.

    G.a.d.M.

    Ronald

  • Das wundert mich jetzt doch etwas:
    Du kannst also LKW fahren, kommst mit einem PKW aber nicht klar?
    Meistens ist das eher andersherum.

    Viel Erfolg dann

    Ronald
    ... der mit so einer simplen Aufgabe keine Datenbank beschäftigen würde