MySQL auf Datum/Uhrzeit kontrollieren

  • Allgemein

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Diversity.

    MySQL auf Datum/Uhrzeit kontrollieren

    Hey Community
    vorab: Ich hoffe der Beitrag ist im richtigen Topic, da es mit MySQL zutun hat jedoch nicht direkt mit VB.

    Mein Vorhaben: Ich habe eine Datenbank mit dem Spalten(Name, Passwort, banned).

    Jetzt sendet die Datenbank (wenn Name & Passwort stimmen & vorhanden sind) den Wert banned zurück an meine Anwendung.
    Sollte dieser Wert eine ´0´ ergeben, wird der User ins Menü geleitet, ansonsten erscheint der Wert in der Spalte Banned, welcher ein Datum ist, zusammen mit folgenden Text.

    VB.NET-Quellcode

    1. Msgbox ("Ihr Account wurde bis zum " & PHPLoginResult.Tostring & " gesperrt.")



    Genaueres zur Spalte Banned:

    0 = Account ist nicht gesperrt.
    X = Account ist permanent gesperrt.
    DD.MM.YYYY - HH:MM = Standartaufbau wenn Account temporär gesperrt ist.


    Frage: Wie überprüft ich best möglich mit der Zeitangabe vom Server, ob das Datum / Uhrzeit in der Vergangenheit liegt, um den Account nicht manuelle entbannen zu müssen.
    Ich möchte dies automatisieren weil...
    1.) es so zuverlässiger ist.
    2.) ich ~ 5.300 Einträge habe. Und dies recht mühsam wär.
    3.) warum programmiert man sonst :P
    Dabei soll das ganze noch halbwegs zügig, sowie performancesparend laufen (ist nur ein Freehoster (Testzwecke))

    //Edit: PS: Ich bin auch auf die Idee gekomm, dies beim Login vom Account zu überprüfen (also nur wenn jemand darauf zugreifen will), würde diese methode aber gerne nicht Nutzen, da ich den Code auch noch weiter ausbauen will. Und auch für andere Zwecke als nur "Account-Entbannung" nutzen will.

    Ich freue mich über eure Antworten. :)
    Von Typisierung hälst du nicht soviel, was?

    Weil dein Banned-Konzept schmeißt 3 Datentypen in einen Topf (integer, String, DateTime), und wir sollen jetzt sagen, wie man sonen Klumpen auch nur ausliest.

    Also mit Typisierung wäre es ganz einfach: "Banned" könnteman umbenennen in "BannedUntil", das würde den nun folgenden Vorschlag gewissermaßen selbsterklärend erklären:

    "BannedUntil" sei natürlich als Datum zu hinterlegen, und als Datum abzurufen.
    Wer noch nie banned war, bei dem ist da 1.1.1970 eingetragen (defaulteinstellung).
    Bei banned Leuten halt das Ablaufdatum des Banners.
    Bei "ForEver-Banned" steht da zB. 1.1.9999 - meinetwegen sollen sie danach wieder spielen dürfen ;)

    Diversity schrieb:

    Wie überprüft ich best möglich mit der Zeitangabe vom Server, ob das Datum / Uhrzeit in der Vergangenheit liegt
    aua!

    VB.NET-Quellcode

    1. if checkDatum < DateTime.Now Then msgbox("Zeitangabe in der Vergangenheit")
    Der Segen der Typisierung: Lass den angemessenen Datentyp für dich arbeiten - hier: DateTime verfügt natürlich über die Vergleichsoperatoren ( <, >, =, <=, >= )


    PS: In diesen Zusammenhang gehört auch die Aufforderung zu: Option Strict On!, weil aufgrund deines konzeptionellen "Typen-Gemansches" ;) gehe ich eiglich davon aus, dass du mit Strict Off proggst.
    Das wäre natürlich Crap.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich hab natürlich nicht nur eine Spalte für Banned, in meiner Datenbank kommen ja 3 Spalten für Banned vor:
    Bann: Ob der Account gebannt ist , wie im 1 Beitrag beschrieben
    Banngrund: Warum der Account gebannt ist.
    BannAdm: Wer ihn gebannt hat.

    Das mit dem Typisieren, ist eine gute idee, werde ich sicher anwenden.

    ErfinderDesRades schrieb:

    VB.NET-Quellcode

    1. if checkDatum < DateTime.Now Then msgbox("Zeitangabe in der Vergangenheit")



    Der Segen der Typisierung: Lass den angemessenen Datentyp für dich arbeiten - hier: DateTime verfügt natürlich über die Vergleichsoperatoren ( <, >, =, <=, >= )
    So ist mein Programm ja bis jetzt geschrieben, dass das Datum erst kontrolliert wird, wenn jemand auf den Account zugreifen möchte. Jedoch suche ich eine andere Methode, umd es halt 1 Serverintern ablaufen zulassen, und man (oder auch nur ich ^^) letzendlich so den Code für zukünftige Projekte besser verwenden kann.


    Freu mich über Antworten


    Ps:

    ErfinderDesRades schrieb:

    aua!
    Das wird schon wieder abheilen

    petaod schrieb:

    @TE: MySQL hat Datumsfunktionen ohne Ende, z.B. CURDATE()

    Hab ich mal reingeschaut das ist echt nice ^^

    wollt nur noch wissen wie am besten realisieren? Kann eine MySQL das immer wieder Kontrollieren? Oder macht das eine PHP Datei? Kenn mich mit beidem nicht sooo sehr aus, hoffe auf eure antworten
    Naja ich möchte halt jeden Minuten kontrollieren. Ob der Wert Bann halt das Datum entspricht. So kann man einseits meine bannfunktion durchgehen, aber auch bestimmte Aktion von der Datenbank gesteuert aufrufen lassen. Es soll ja überprüft werden ob das Jetzige Datum neuer als das in der Spalte ist ist (das ist kein Problem das kann ich).
    Nur wie pack ich dass in eine Schleife über PHP oder direkt in der MySQL (Wenn das geht) Das der BEFEHL dauerhaft läuft also

    Überprüfe jetziges Datum
    Kontrolliere mit dem Datu der Tabelle
    Warte 60Sek und mach es wieder
    Diese Aufgaben kann weder php noch mysql selbständig verrichten, weil das sind passive Systeme. Du mußt einen Admin-Client schreiben, der diese Aufgaben regelmäßig anstößt.

    (Also jdfs., soweit ich mich damit auskenne, und das ist eiglich nicht sehr weit.)

    btw.: Was soll eiglich passieren, wenn kontrolliert ist, und ein Datum stellt sich als abgelaufen heraus?

    ErfinderDesRades schrieb:

    btw.: Was soll eiglich passieren, wenn kontrolliert ist, und ein Datum stellt sich als abgelaufen heraus?

    naja einerseits kann man damit kontrollieren ob account gebannt ist (jedoch ist die beschriebene Idee (Post#2) besser. Andererseits kann man eine Funktion einbauen die immer Kontrolliert wann wurde der Account das letze mal benutzt und wenn dies länger als 6Monate her ist wird der Account einfach aus der Datenbank gelöscht.