Premiumsystem 7Tage [MYSQL R34]

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Timestamp gibt dir die Vergangenen Sekunden seit dem 01.01.1970 aus.
    Damit kannst Du Zeitabstände wunderbar messen.


    Als Beispiel:
    Wenn der Jetzige Timestamp bei exakt "1390417341" liegen würde, und du abfragen willst ob eine Minute seit diesem Zeitpunkt vergangen ist:
    if(time() >= 1390417341+60)
    Du rechnest also 60 Sekunden drauf und fragst ab, ob der aktuelle Zeitstempel diesem Entspricht oder größer ist.

  • Klar, die Funktion "gettime()" (Ohne Parameterangaben) gibt dir nen aktuellen Timestamp aus.
    Auf diesen rechnest Du einfach 7 Tage in Sekunden drauf (7*24*60*60 = 604800)


    Sprich:
    new ZeitAbgelaufenIn = gettime()+604800;
    Abfragen kannste das dann mit:
    if(gettime() >= ZeitAbgelaufenIn)


    Ist in diesem Fall nur ein Beispiel. Das kannst Du im prinzip auch mit jedem anderen Zeitintervall durchziehen.
    Die nötige Zeit für einen Tag wäre z.B. zu errechnen durch: 24*60*60 = 86400


  • Ah jetzt verstehe ich das :), ich dank dir.
    Doch, wie speichere ich das jetzt? :D



    format(query,sizeof(query),"UPDATE user SET premium WHERE id='%i'",ZetAbgelaufen,sInfo[playerid][PlayerID]);
    mysql_function_query(dbhandle,query,false,"","");

  • Ich zeig dir mal noch einen weiteren weg und zwar kannst du eine spalte erstellen mit der Eigenschaft timestamp.


    Dann kannst du beim setzen des Premiumaccounts direkt die 7 Tage dazu rechnen das geht so bei dem UPDATE befehl


    Beispiel

    SQL
    UPDATE ... SET `Premium_Ablaufdatum` = DATE_ADD(NOW(), INTERVAL 7 DAY) WHERE .... = ...;


    oder je nachdem kannst du das 7 auch durch einen Platzhalter ersetzen.



    Nun brauchst du nur noch beim einloggen abfragen ob der Premiumaccount ausgelaufen ist oder nicht :


    SQL
    SELECT ...,..., IF( `Premium_Ablaufdatum` > NOW(), 0, 1) AS Abgelaufen  WHERE ... = ...


    So prüfst du ab ob das Datum größer ist als das jetzige wenn ja hat Abgelaufen den wert 0 wenn nicht dann 1 somit kannst du Abgelaufen mit
    cache_get_field_content_int(0, "Abgelaufen ");
    auslesen