IP auslesen und nach 1 Minute löschen

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

  • IP auslesen und nach 1 Minute löschen

    Hallo an euch.
    Bin beim Durchforsten zu euch gestossen.
    Bis jetzt hab ich hauptsächlich HTML, Flash und JAVA verwendet.
    Möchte aber jetzt auf PHP umsteigen und bin daher am Lernen.
    Folgendes Problem habe ich.
    Mein erstelltes Formular mit Pflichtfelderabfrage und EMailsyntaxüberprüfung soll es Floddern schwer machen.
    Jetzt hab ich es geschafft, in eine .txt Datei die IP zu speichern.
    Aber wie kann ich jetzt die IP nach einer Minute wieder aus der
    .txt Datei entfernen, damit dieser Benutzer wieder senden kann????

    Ich hab schon über den Timestamp gelesen. Aber das haut alles nicht hin.
    Wenn ich es schaffe, die Zeit neben der IP-Adresse in der .txt Datei zu platzieren, dann funktioniert der IP-Vergleich
    nichtmehr.
    Anscheinend darf neben der IP nichts anderes stehen.

    Vielleicht kann mir jemand helfen und mir sagen, wie ich meinen Code erweitern muss.
    Ich glaube nicht, dass noch viel fehlt, aber momentan steh ich an.

    Bin ja froh, dass ichs endlich geschnallt hab, dass bei PHP statt "."--'.' gehört. Das andere lerne ich hoffentlich auch noch

    Hier mein Code:
    PHP-Code:
    <?PHP
    $user_ip 
    $_SERVER['REMOTE_ADDR'];
    $array file('ip.txt');
    foreach(
    $array as $zeile) {
    if (
    $user_ip == trim($zeile)) {
    die(
    '<div style="color: #FF0000; font-weight: bold;">
    Ihre IP-Adresse ist gesperrt. Sie k&ouml;nnen 
    erst wieder in einer Minute senden!!</div>'
    ."\n</body>\n</html>");
            }
          }
    ?>

    <?PHP
    $ip 
    $REMOTE_ADDR;
    $ipdatei fopen("ip.txt"a);
    fwrite($ipdatei"$ip"."\n"); //Wenn ich hier die Zeit dazu gebe, dann funkt. die Abfrage nichtmehr.
    fclose($ipdatei);
     
         
    ?>
    mfg
    wienboy
    mfg
    wienboy
    www.bmw-rt.at
    www.tourenmotorrad.at

  • #2
    du schreibst die beiden werte mit einem trennzeichen in die datei, z.b.: $_SERVER['REMOTE_ADDR'].'|'.time()."\n"

    auslesen dann mit: $row=explode('|', trim($zeile));
    $row[0] ist dann die ip und $row[1] die zeit.

    sollte passen - nicht getestet.


    setzt mal error_reporting(E_ALL); an den anfang deines scriptes, hast da noch ein paar fehler.
    dann solltest du noch alte einträge aus der datei löschen.

    am besten ist für deine zwecke eine datenbank geeignet.

    Kommentar


    • #3
      lese über session, da es dafür am bestens geignet ist
      PHP-Code:
      //lesen
      $array file('ip.txt');
      foreach(
      $array as $zeile) {
      if (
      $_SERVER['REMOTE_ADDR'] == trim(substr($zeile,0,15)) && time()<trim(substr($zeile,15)+60)) {
      die(
      '<div style="color: #FF0000; font-weight: bold;">
      Ihre IP-Adresse ist gesperrt. Sie k&ouml;nnen 
      erst wieder in einer Minute senden!!</div>'
      ."\n</body>\n</html>");
              }
            }


      //schreiben
      $ipdatei fopen("ip.txt"a);
      fwrite($ipdateistr_pad($_SERVER['REMOTE_ADDR'],15).time()."\n"); 
      fclose($ipdatei); 
      Slava
      bituniverse.com

      Kommentar


      • #4
        [COLOR=red]Hallo und großen Dank an 3DMax und Slava !!!![/COLOR]

        Der Code von Slava funktioniert super. Dank euch beiden weiß ich jetzt auch, wie wichtig das "|" ist.
        Ich hab jetzt noch die Zeit und das Datum dazugetan.
        Nun schaut der Eintrag in die ip.txt wie folgt aus:
        [COLOR=blue]85.124.83.182 1159728453|20:47:33|01 10 2006[/COLOR]

        Was ich nicht ganz verstanden habe, was die Zahl 15 macht :
        if ($_SERVER['REMOTE_ADDR'] == trim(substr($zeile,0,[color=red]15[/color])) && time()<trim(substr($zeile,[color=red]15[/color])+60)) {

        Die IP-Adressen werde ich auf jeden Fall manuell löschen. So kann ich mir gleich ansehen, wieviel und wann gesendet wurde.

        Noch eine Frage an euch: Wisst ihr ein gutes Buch, wo so viel wie möglich über PHP steht und wo man einfach damit lernen kann??
        Einstweilen helfen mir ein bisschen die HTML und Javakenntnisse
        und natürlich das Internet. Aber ein gutes Buch wäre schon fein.
        Ich möchte bald soweit sein, dass ich kompl. Webseiten in PHP mache. Momentan beschränkt sich PHP bei mir noch auf Formulare usw.

        Und weil ihr mir so geholfen habt, gibts hier den kompletten Code meines Formulars.Vielleicht können es ja andere auch gebrauchen!!
        Das Formular besteht aus 5 Checkboxen und 7 Feldern (Nachricht,Firma,Name,Strasse,ort,tel,mail), 1 Sendeknopf und einen Rücksetzknopf.
        Wobei diese nur in der Formularseite zu sehen sind
        und hier beim Code keine Rolle spielen. Die Aktionen werden ja in einer 2 ten Seite ausgeführt.

        PHP-Code:

        <?PHP
        // IP auslesen, vergleichen und Sperrmeldung bringen
        $array file('ip.txt');
        foreach(
        $array as $zeile) {
        if (
        $_SERVER['REMOTE_ADDR'] == trim(substr($zeile,0,15)) && time()<trim(substr($zeile,15)+60)) {
        die(
        '<div style="color: #FF0000; font-weight: bold;">
        Ihre IP-Adresse ist gesperrt. Sie k&ouml;nnen 
        erst wieder in einer Minute senden!!</div>'
        ."\n</body>\n</html>");
        }
        }

        ?>

        <?PHP
        //Variablen setzen
        $datum date("d m Y");
        $zeit date("H:i:s");

        // IP in TEXT-Datei schreiben
        $ipdatei fopen("ip.txt"'a');
        fwrite($ipdateistr_pad($_SERVER['REMOTE_ADDR'],15).time()."|".$zeit."|".$datum."\n"); 
        fclose($ipdatei);
        ?>

        <?PHP
        // Abfrage der Pflichtfelder und ob der Syntax der Email richtig ist und der Ausgabetext dazu
        if($name == "" or $mail == "" or $ort == "" or 
        (!
        eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@([0-9a-z](-?[0-9a-z])*\.)+[a-z]{2}([zmuvtg]|fo|me)?$",$mail)))
        {
        echo 
        "<center><strong>Pflichtfelder fehlen, oder die Emailadresse ist falsch. 
        Versuchen Sie es bitte nach einer Minute noch einmal.<br>
        <font color='#FF0000'>Damit wir nicht 
        zugesendet werden, kann man nur eine Sendung pro Minute machen!!
        Wir bitten um Verst&auml;ndnis.</font></br></strong></center>"
        ;
        }
        else
        {       
        // Variable wird gesetzt
        $text $servicecheck$notcheck.$schulcheck.$webcheck.$sonstcheck.
        "\n".$nachricht."\n".$firma."\n".$name."\n".$strasse."\n".$ort.
        "\n".$tel."\n".$mail;

        // Die ausgefüllten Daten werden per Email an eingetragene Email gesendet
        mail("meins@meins.at","Email vom 
        Webformular von [url]www.meins.at[/url]"
        ,$text);

        // Und hier kommt die Zusammenfassung
        echo "<center><br><strong>
        <font color='#FF0000'>Danke für Ihre Nachricht. 
        Wir werden uns in K&uuml;rze bei Ihnen melden.</font></strong></br></center>"
        ;
        echo 
        "<br><strong>Sie haben folgende Angaben gemacht:</strong></br>";
        echo 
        "<table width='100%' border='0' align='center' cellspacing='2'><tr><td width='30%'><u>Thema:</u></td><td width='70%'>
        <font color='#0000FF' align='left'>
        $servicecheck $notcheck $schulcheck $webcheck $sonstcheck</font></tr></td>
        <tr><td><u>Ihre Nachricht:</u></td><td><font color='#0000FF' align='left'><font color='#0000FF'>
        $nachricht</font></td></tr>
        <tr><td><u>Firma:</u></td><td><font color='#0000FF' align='left'>
        <font color='#0000FF'>
        $firma</font></td></tr>
        <tr><td><u>Ihr Name:</u></td><td><font color='#0000FF' align='left'><font color='#0000FF'>
        $name</font></td></tr>
        <tr><td><u>Strasse:</u></td><td><font color='#0000FF' align='left'><font color='#0000FF'>
        $strasse</font></td></tr>
        <tr><td><u>Ort:</u></td><td><font color='#0000FF'>
        $ort</font></td></tr>
        <tr><td><u>Tel.:</u></td><td><font color='#0000FF'>
        $tel</font></td></tr>
        <tr><td><u>E-Mail:</u></td><td><font color='#0000FF'>
        $mail</font></td></tr></table>";
        }
        ?>
        Ich hoffe, dass es jemanden hilft.
        Liebe Grüße
        wienboy
        Zuletzt geändert von wienboy; 02.10.2006, 14:06.
        mfg
        wienboy
        www.bmw-rt.at
        www.tourenmotorrad.at

        Kommentar


        • #5
          Original geschrieben von wienboy
          [COLOR=red]Hallo und großen Dank an 3DMax und Slava !!!![/COLOR]

          Der Code von Slava funktioniert super. Dank euch beiden weiß ich jetzt auch, wie wichtig das "|" ist. Ich hab jetzt noch die Zeit und das Datum dazugetan. Nun schaut der Eintrag in die ip.txt wie folgt aus:
          [COLOR=blue]85.124.83.182 1159728453|20:47:33|01 10 2006[/COLOR]

          Was ich nicht ganz verstanden habe, was die Zahl 15 macht :
          if ($_SERVER['REMOTE_ADDR'] == trim(substr($zeile,0,[color=red]15[/color])) && time()<trim(substr($zeile,[color=red]15[/color])+60)) {
          endlich mal jemand, der sich richtig freut

          irgenwie hast du unsere postings zusammengewurschtelt.

          also, slava ist davon ausgegangen, dass eine ip max 15 stellen hat (xxx.xxx.xxx.xxx). also die ersten 15 stellen sind immer die ip, daher 15 (feste breite).

          ich bin von einer CSV-Datei ausgegangen. die einzelnen datensätze sind hierbei durch einen eindeutigen trenner begrenzt, können aber eine dynamische breite besitzen.
          CSV-Datei steht für Character Separated Values oder Comma Separated Values
          es muss also nur ein eindeutiger trenner sein (ich habe '|' verwendet, kann aber auch ';' etc. sein)

          ps: deinen code kann man kaum lesen. lass die größe auf default und mach einfach zeilenumbrüche.

          Kommentar


          • #6
            nachtrag:
            du schreibst die daten redundant. der timestamp impliziert bereits das datum und die uhrzeit.

            ein gutes buch kann ich nicht empfehlen, nur ein paar gute links:
            quakenet:#php Tutorial
            de.comp.lang.php.* FAQ
            und natürlich www.php.net

            [EDIT]
            achso, die fehler hast du auch nicht beseitigt:

            $ip = $REMOTE_ADDR; // ist veraltet
            $_SERVER['REMOTE_ADDR'] verwenden

            $ipdatei = fopen("ip.txt", a); // parameter a ist ein string und keine konstante
            -> richtig 'a'
            Zuletzt geändert von 3DMax; 01.10.2006, 22:52.

            Kommentar


            • #7
              Hallo,

              natürlich freue ich mich. Und ein "Dankeschön" muss natürlich sein. !!

              Mit dem Trennzeichen hast recht. Bin ich dann auch drauf gekommen . Mit einer CSV-Datei hab ich es nicht probiert.
              Hätte mir auch einfallen können. Jetzt versteh ich auch die 15 im Code. Zuerst dachte ich, dass hat etwas mit der Anzahl der Zeilen zu tun. Dabei ist es klar,
              wenn man sich den Code nochmals genauer ansieht, dass es für die IP Adresse gilt.

              Und danke für den Tipp mit dem alten Code. Ich werde mich eh damit genauer beschäftigen. Die Seiten in deinem Beitrag hab
              ich schon unter Fav. gespeichert.

              Die Schrift hab ich auch schon geändert

              also nochmals liebe Grüße aus Wien
              wienboy
              mfg
              wienboy
              www.bmw-rt.at
              www.tourenmotorrad.at

              Kommentar


              • #8
                Hallo an Alle,

                nach dem ich mich jetzt längere Zeit wieder tapfer geschlagen habe und mein erstelltes Formular im Einsatz ist, möchte ich jetzt etwas hinzufügen.

                Ich habe im Formular ein Uploadfeld $datei erstellt.
                PHP-Code:
                 <tr>
                      <
                td colspan="2">Bild hochladen:*</td>
                      <
                td colspan="2">
                        <
                input type=file name=datei id="datei" size="50" />      </td>
                    </
                tr
                Wenn ich das im formcode einfüge, wird kein Bild mit gesendet. Nach dem ich jetzt schon einige Beiträge gelesen habe und einige Codebeispiele versuchte, muss ich mich wieder an euch wenden.

                Das kann doch nicht viel sein, wenn ich beim bestehenden Formular (voriger Beitrag)ein Bild (nur jpg oder gif) mitsenden möchte.

                Könnt ihr mir da bitte weiterhelfen?? Ich hab momentan keine Ahnung wie ich das in der form.php verarbeite.

                liebe Grüße aus Wien
                wienboy
                mfg
                wienboy
                www.bmw-rt.at
                www.tourenmotorrad.at

                Kommentar


                • #9
                  Hast Du den enctype im Formular entsprechend gesetzt?

                  Zur Frage, wie Du das verarbeiten kannst: Schau mal ins Manual
                  Zuletzt geändert von kuddeldaddeldu; 01.03.2007, 19:15.

                  Kommentar


                  • #10
                    PHP-Code:
                    <form action="form1.php" method="post" enctype=multipart/form-data  name="form1" target="_self" id="form1"
                    hab schon in der Manual nachgesehen. Hab nichts entsprechendes gefunden. Vielleicht hab ich was übersehen.

                    Ich könnte mir vorstellen, dass das höchstens 3 Zeilen sind, die ich in die Formverarbeitung einbinden muss.
                    mfg
                    wienboy
                    www.bmw-rt.at
                    www.tourenmotorrad.at

                    Kommentar


                    • #11
                      Vielleicht hab ich was übersehen.
                      Ja, genau das, was ich Dir verlinkt habe. Mal draufgeklickt?

                      Kommentar


                      • #12
                        OffTopic:
                        Erstmal ein Hallo nach Wien von einem Wiener dens nach D verschlagen hat.


                        Zu Deiner Frage nach einem guten Buch, ich hab mir das BUch "Programmieren lernen in PHP 4" von Jörg Krause gekauft. Das baut zwar auf PHP4 auf, sollte aber auch noch bei PHP5 in den meisten Fällen zutreffen. Kommt eben drauf an mit welcher Version Du codest. Die ISBN ist 3-446-21754-1

                        Was Dein Problem mit dem Fileupload betrifft such mal nach der Funktion 'move_uploaded_file', das sollte Dir weiterhelfen. Der Formkopf ist schon mal richtig.

                        EDIT:
                        Da hatte ich wohl das Fenster zu lange auf, Kuddel... hat schon geantwortet.
                        Zuletzt geändert von Godfrey; 01.03.2007, 19:29.

                        Kommentar


                        • #13
                          Danke kuddeldaddeldu,

                          hab den Link doch tatsächlich übersehen. Aber so richtig hilft mir das nicht weiter. Ich möchte ja nicht auf nen Server laden, sondern das Bild gleich direkt per Mail versenden. In den älteren Beiträgen zu diesem Thema hier, ist eh mein kompletter Code.

                          Hallo Godfrey,

                          danke für den Tipp. Muss ich gleich mal nachsehen. Was treibt einen Wiener nach D ?
                          mfg
                          wienboy
                          www.bmw-rt.at
                          www.tourenmotorrad.at

                          Kommentar


                          • #14
                            OffTopic:
                            Tja, erst meine deutsche Frau und mit Ihr der Job.

                            Kommentar


                            • #15
                              Wenn Du ein Formular mit einem PHP-Script als Action definierst, wird das auch an den Server geschickt, was sonst? Ob Du das dann auf dem Server lässt, oder per Mail verschickst und dann wieder löschst, bleibt ja Dir überlassen. Das hat nichts mit dem Grundprinzip zu tun, wie Du an die hochgeladenen Dateien kommst.

                              Kommentar

                              Lädt...
                              X