Announcement

Collapse
No announcement yet.

Problem mit NOW() und Timestamp

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit NOW() und Timestamp

    Hallo alle miteinander,

    ich habe ein kleines Problem mit einer Xampp MySQL Datenbank.
    Ich setze aktuell mit einem PHP Code einen Timestamp bei einem fehlgeschlagenem Loginversuch. Also eine Speicherung aller falschen logins mit IP und Datum.
    Nun möchte ich nach 3 falschen Versuchen mit einem Login die IP und den Username für 10 Minuten sperren. Dafür muss ich natürlich wissen, wie oft in den letzten 10 Minuten dieser Username von der IP ausprobiert wurde.
    Wenn ich jedoch nun den Timestamp in der Tabelle benutze und gegen die aktuelle Zeit verrechne, bekomme ich seltsame Werte.

    Das SQL Feld ist vom Typ timestamp. Die Verrechnung sieht bei mir aktuell noch folgendermaßen aus:
    Code:
    SELECT * 
    FROM fehlerhafte_logins 
    WHERE flogin_username = '".$name."' 
    AND (NOW() - flogin_timestamp) < 600
    Ich dachte eigentlich, dass mir die Abfrage die vergangene Zeit in Sekunden zurückliefert, daher am Ende "< 600".

    Durch
    Code:
    SELECT NOW() - flogin_timestamp 
    FROM fehlerhafte_logins;
    bekomme ich ja die "anzahl der Sekunden" als Differenz der aktuellen Zeit und des Timestamps. Da sehe ich nun, dass anscheinend bei jeder vollen Minute der Wert auf volle 100 springt und dann weiter zählt. Allerdings habe ich auch Werte mit 11167, welche meine Theorie widerlegen.

    Ich hoffe, ihr habt verstanden was ich brauche und möchte ^^
    Eigentlich will ich nur die Anzahl Sekunden vom Timestamp bis jetzt. -.-

    Grüße und danke schonmal,
    Philipp

  • #2
    TIMESTAMPDIFF

    http://dev.mysql.com/doc/refman/5.1/...functions.html
    Christian

    Comment


    • #3
      perfekt - danke ...

      nun habe ich noch ein problem. Die Uhrzeit, die mir SQL mit NOW gibt, ist falsch. Der Unterschied sind ca. 30 Sekunden. Ich habe in einem Forum schon gelesen, dass man den Befehl
      Code:
      UPDATE mysql.time_zone SET Use_leap_seconds='N';
      eingeben muss.
      Leider hilft mir das nicht weiter.

      Comment


      • #4
        http://dev.mysql.com/doc/refman/5.1/...nction_sysdate
        Christian

        Comment


        • #5
          nochmal perfekt - danke

          Kannte den Unterschied dabei garnicht.

          Comment


          • #6
            Hey, sorry, dass ich mich da nochmal melde, aber das Problem ist doch nicht behoben.

            Beide Funktionen geben mir genau den gleichen Rückgabewert (NOW() - SYSDATE() = 0).

            Noch einen Vorschlag? -.-

            Comment


            • #7
              Hallo,
              Originally posted by Philipp0901 View Post
              ... Die Uhrzeit, die mir SQL mit NOW gibt, ist falsch. Der Unterschied sind ca. 30 Sekunden.
              Woraus schliest du das die Zeit Falsch ist? Zu welcher Referenz ermittelst du den Unterschied?

              Originally posted by Philipp0901 View Post
              ...Beide Funktionen geben mir genau den gleichen Rückgabewert (NOW() - SYSDATE() = 0).
              In dieser Konstellation und wenn nicht vorher weitere (zeitaufwändige) Operationen ausgeführt werden, sollte das auch so sein.
              Wo genau liegt dein Problem?

              Du solltest die Datums-/Zeitfunktionen statt einfacher mathematischer Operationen verwenden, wenn du korrekte Werte haben möchtest. Ein MySQL-DATETIME ist KEIN Unix-Timestamp und gibt dir nicht einfach irgendwelche Sekunden an, mit denen du rechnen kannst.

              Korrekt wäre bspw.:
              [highlight=sql]
              ...
              AND DATE_SUB(NOW(), INTERVAL 10 MINUTE) < flogin_timestamp
              [/highlight]

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment

              Working...
              X