IF - Problem

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

  • IF - Problem

    Mahlziet zusammen,

    ich hab wieder ein kleines Problem, wahrscheinlich steh ich nur auf dem Schlauch

    Ich bastel mir grad nen kleinen Vote zusammen, und versuche nun praktisch eine 1-tägige IP-Sperre zu basteln. Da hakt es dann allerdings irgendwie bei der IF-Abfrage

    hier der Code:
    PHP-Code:
    <?
    //Verbindung zur DB herstellen
    include "include/connect2db.inc.php";

    $checkipsql = "select max(zeit) + INTERVAL 1 DAY from votes where user = '".$HTTP_SERVER_VARS['REMOTE_ADDR']."'";
    $ipresult = mysql_query($checkipsql, $dblink) or die(mysql_error());
    $ip = mysql_fetch_array($ipresult);

    if (selektierte Zeit + 1 Tag != leer && selektierte Zeit + 1 Tag < strftime("%Y-%m-%d %H:%M:%S", time())
      header("Location:index.php?modul=showvote&voted=already");  
    else
    {
      $sql = "insert into votes (id, opt".$_POST['vote'].", zeit, user) values(1, 1, now(), '".$HTTP_SERVER_VARS['REMOTE_ADDR']."')";
      $result = mysql_query($sql, $dblink) or die(mysql_error());
      header("Location:index.php?modul=showvote&voted=yes");  
    }
    ?>
    die IF-Abfrage hab ich mal pseudo ausformuliert, wäre supern wenn mir da jemand auf die Sprünge helfen könnte.

    ich hab schon das hier probiert:
    PHP-Code:
    if (!empty($ip['zeit']) && $ip['zeit'] < strftime("%Y-%m-%d %H:%M:%S"time())) 
    aber das funz leider net, jedenfalls ist die Bedingung immer false.

    Oder liegt es vielleicht am SQL-Statement? Bin grade total ratlos wie ich das machen soll...

  • #2
    dasn bissle umständlich....

    ich würds anders machen...

    1. Errechne Differenz aus time() (Timestamp) und den Sekunden, wie lange die Sperre halten soll.

    2. Lösch alle aus der Datenbank, bei denen der eingetragene Timestamp < als aktueller timestamp.

    3. Hol die Einträge mit einer Where Klausel. where ip = $_SERVER["REMPTE_ADDR"]

    4. wenn mysql_num_rows() > 0 dann unterbinde die folgenden aktionen...er darf nämlich nicht.

    sollte mysql_num_rows() == 0 sein, dann trage seine IP mit timestamp in die DB ein und lass ihn alles machen was er will

    ich kann dir mal ein Code-Scnipsel beifügen:

    PHP-Code:
        $ip_c $_SERVER["REMOTE_ADDR"];
        
    $zeit_c time();
        
        
    $con_c = @mysql_connect($mmvars["mysql"][0]["host"], $mmvars["mysql"][0]["user"], $mmvars["mysql"][0]["password"]);
        
    $db_c = @mysql_select_db($mmvars["mysql"][0]["db"]);

        if (!
    $con_c || !$db_c) {
            
    header("Location: ./community/msg.php?msg=Die+Datenbank+ist+nicht+verfuegbar");
            exit();
        }
        
        
    $del_c $zeit_c $mmvars["counter"]["refresh_time"];
        
        @
    mysql_query("delete from ip_lock_visits where time < $del_c");
        
        
    $res_c = @mysql_query("select count(*) AS zahl from ip_lock_visits where ip = '$ip_c'");
        
    $row_c = @mysql_fetch_array($res_c);
        if(
    $row_c["zahl"] == 0) {    
            @
    mysql_query("insert into ip_lock_visits set time = '$zeit_c', ip = '$ip_c'");
            @
    mysql_query("update visits set count = count + 1");
        }    
        @
    mysql_close($con_c); 
    tata
    moqui

    [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

    Kommentar


    • #3
      ich habe mal versucht Deinen Schnipsel für mich umzubasteln, allerdings läuft das noch nicht ganz rund, ich denke es hängt mit den Datentypen zusammen...

      PHP-Code:
      <?
      //Verbindung zur DB herstellen
      include "include/connect2db.inc.php";

      $ip = $_SERVER["REMOTE_ADDR"];
      $zeit = time();

      $del = $zeit - 86400; // also jetzt - 1 Tag

      mysql_query("delete from ip_locks where time < $del", $dblink);

      $res = mysql_query("select count(*) AS zahl from ip_locks where ip = '$ip'", $dblink) or die(mysql_error());
      $row = mysql_fetch_array($res);

      if(mysql_num_rows($res) > 0)
        header("Location:index.php?modul=showvote&voted=already");  
      else
      {
        mysql_query("insert into ip_locks(time, ip) values(".$zeit.", '".$ip."')", $dblink);
        mysql_query("insert into votes (id, opt".$_POST['vote'].") values(1, 1)", $dblink);
        header("Location:index.php?modul=showvote&voted=yes");  
      }

      ?>
      funzt alles wunderbar, ich darf nur einmal voten.

      Liegt aber glaub ich daran, das jetzt in meiner Tabelle
      Code:
      CREATE TABLE ip_locks (
      time timestamp,
      ip varchar(15)
      )
      bei Time eine 14-stellige Zahl steht, mir oben die Variable $zeit aber nur eine 10-stellige Zahl liefert.

      Bsp.:
      Tabelle: 20001125175125
      $zeit: 1054895125

      insofern kann er die Einträge ja nie wieder aus der Tabelle löschen, da $del aufgrund der 4 Stellen weniger immer kleiner ist als time.

      hab ich Dich falsch verstanden, und der Typ in der Tabelle ist nicht timestamp?

      EDIT:
      hab den Table gedroppt und mit Datentyp time für die Zeitspalte neu angelegt, aber nun darf ich gar nicht mehr voten, da mysql_num_rows($res) immer 1 liefert, auch wenn der Table leer ist?!?!
      Zuletzt geändert von P2oldi; 06.06.2003, 11:38.

      Kommentar


      • #4
        definier time als int(10), dann ist dein problem behoben

        warum das so ist, steht hier:
        http://www.mysql.com/doc/en/DATETIME.html
        Kissolino.com

        Kommentar


        • #5
          sieht bei mir so aus....

          Code:
          +-------+----------+------+-----+---------+-------+
          | Field | Type     | Null | Key | Default | Extra |
          +-------+----------+------+-----+---------+-------+
          | time  | int(10)  | YES  |     | NULL    |       |
          | ip    | tinytext | YES  |     | NULL    |       |
          +-------+----------+------+-----+---------+-------+
          tata
          moqui

          [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

          Kommentar


          • #6
            Man nehme

            PHP-Code:
            $res mysql_query("select count(*) AS zahl from ip_locks where ip = '$ip'"$dblink) or die(mysql_error());
            $row mysql_fetch_array($res);

            if(
            mysql_num_rows($res) > 0)
              
            header("Location:index.php?modul=showvote&voted=already");  
            else
            {
              
            mysql_query("insert into ip_locks(time, ip) values(".$zeit.", '".$ip."')"$dblink);
              
            mysql_query("insert into votes (id, opt".$_POST['vote'].") values(1, 1)"$dblink);
              
            header("Location:index.php?modul=showvote&voted=yes");  

            und schreibe

            PHP-Code:
            $res mysql_query("select count(*) AS zahl from ip_locks where ip = '$ip'"$dblink) or die(mysql_error());

            if(
            mysql_num_rows($res) > 0)
              
            header("Location:index.php?modul=showvote&voted=already");  
            else
            {
              
            mysql_query("insert into ip_locks(time, ip) values(".$zeit.", '".$ip."')"$dblink);
              
            mysql_query("insert into votes (id, opt".$_POST['vote'].") values(1, 1)"$dblink);
              
            header("Location:index.php?modul=showvote&voted=yes");  

            Das muss durchaus nicht die Lösung sein, aber es macht keinen Sinn grundsätzlich einen Array zu lesen, wenn eventuell überhaupt keiner vorhanden ist.

            Des weiteren würde ich die SQL-Anfrage durch:
            SELECT ip FROM ip_locks WHERE ip = '$ip'
            ersetzen. Dann kannst du nochmals prüfen, ob nicht eventuell eine leere IP oder z.B. 127.0.0.1 als "gesperrt" eingetragen worden ist.
            Eventuelle Tippfehler bei PHP-Beispielen können durchaus vorkommen, aber es geht um die grundsätzliche Möglichkeit der Anwendung.

            Es war einmal ein Benutzer, der hatte ein Problem mit ... PHP (http://de3.php.net/manual/de/) MySQL (http://dev.mysql.com/doc/mysql/de/) HTML (http://www.selfhtml.org/)

            Wer suchet, der findet: http://www.php-resource.de/forum/search.php
            Immer noch nichts? Dann frag!


            Mit freundlichen Grüßen,
            @4u

            Kommentar


            • #7
              Original geschrieben von a4u
              SELECT ip FROM ip_locks WHERE ip = '$ip'
              das war's Anscheinend hat der count(*) eine 0 zurückgeliefert als Ergebnis und das stand wohl in der ersten Zeile -> mysql_num_rows = 1

              aber nun funzt es wunderbar, vielen Dank nochmal an alle

              Kommentar


              • #8
                Wo ich mir jetzt nochmal das durchlese - kein Wunder - du wolltest etwas ZÄHLEN - natürlich gibt er dort EIN Ergebnis zurück - nämlich die Zahl 0 - aber du fragtest ja nicht nach dem Inhalt des ausgelesenen Strings sondern ob überhaupt eine Rückgabe stattfindet - und die war 1.

                Ich würde für diesen Fehler auf meiner Seite "Betriebsblindheit" als Begründung bringen - man sucht halt immer nach einem komplizierten Problem als in echt vorliegt
                Eventuelle Tippfehler bei PHP-Beispielen können durchaus vorkommen, aber es geht um die grundsätzliche Möglichkeit der Anwendung.

                Es war einmal ein Benutzer, der hatte ein Problem mit ... PHP (http://de3.php.net/manual/de/) MySQL (http://dev.mysql.com/doc/mysql/de/) HTML (http://www.selfhtml.org/)

                Wer suchet, der findet: http://www.php-resource.de/forum/search.php
                Immer noch nichts? Dann frag!


                Mit freundlichen Grüßen,
                @4u

                Kommentar


                • #9
                  eben, hätte dann lieber nachfragen sollen, ob das zurückgegebene Ergebnis > 0 ist, nicht ob überhaupt eins da ist

                  aber wurst, nu geht's ja

                  Kommentar


                  • #10
                    PHP-Code:
                    $res mysql_query("select count(*) AS zahl from ip_locks where ip = '$ip'"$dblink) or die(mysql_error());

                    if(
                    mysql_num_rows($res) > 0)
                      
                    header("Location:index.php?modul=showvote&voted=already");  
                    }
                    else
                    {
                      
                    mysql_query("insert into ip_locks(time, ip) values(".$zeit.", '".$ip."')"$dblink);
                      
                    mysql_query("insert into votes (id, opt".$_POST['vote'].") values(1, 1)"$dblink);
                      
                    header("Location:index.php?modul=showvote&voted=yes");  

                    ich würde das so schreiben.

                    MFG T

                    Kommentar


                    • #11
                      Original geschrieben von Master-T
                      PHP-Code:
                      $res mysql_query("select count(*) AS zahl from ip_locks where ip = '$ip'"$dblink) or die(mysql_error());

                      if(
                      mysql_num_rows($res) > 0)
                        
                      header("Location:index.php?modul=showvote&voted=already");  
                      }
                      else
                      {
                        
                      mysql_query("insert into ip_locks(time, ip) values(".$zeit.", '".$ip."')"$dblink);
                        
                      mysql_query("insert into votes (id, opt".$_POST['vote'].") values(1, 1)"$dblink);
                        
                      header("Location:index.php?modul=showvote&voted=yes");  

                      ich würde das so schreiben.

                      MFG T
                      Und damit genau den selben Fehler machen - es gibt IMMER ein Ergebnis für "mysql_num_rows". Nämlich die Anzahl der Treffer - selbst wenn diese 0 ist, gibt "mysql_num_rows" 1 zurück.

                      PS.: Wo ist bei dem Quellcode groß der Unterschied zum Original, außer das du die eine Zeile entfernt hast, die auch ich bereits als unnötig deklariert habe?!?
                      Eventuelle Tippfehler bei PHP-Beispielen können durchaus vorkommen, aber es geht um die grundsätzliche Möglichkeit der Anwendung.

                      Es war einmal ein Benutzer, der hatte ein Problem mit ... PHP (http://de3.php.net/manual/de/) MySQL (http://dev.mysql.com/doc/mysql/de/) HTML (http://www.selfhtml.org/)

                      Wer suchet, der findet: http://www.php-resource.de/forum/search.php
                      Immer noch nichts? Dann frag!


                      Mit freundlichen Grüßen,
                      @4u

                      Kommentar

                      Lädt...
                      X