• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datumsvergleich, "verfallsdatum"

-Ch-

Neues Mitglied
Hallo!

Ich bin mir nicht sicher ob ich mit meiner Frage hier richtig bin aber ich versuch es einmal.

Ich bräuchte Tipps zur Programmierung von "Ablaufdaten".

Ein User trägt etwas in eine Datenbank ein, was nur eine bestimmte Zeit angezeigt werden soll. Ich bin soweit, dass das Datum zum Zeitpunkt des Eintrages + 7 Tage dazu, also das Enddatum (Timestamp) mitgespeichert werden.

Wie stell ich das nun am besten an, dass diese 2 Daten miteinander verglichen werden, und nach den 7 Tagen sollte der Eintrag dann verschwinden, mit einem Updatebefehl der ein Feld in der Datenbank auf 0 setzt.

Versucht habe ich es mit der NOW funktion.
Code:
$getcommentinfo = $DB->query("SELECT * FROM ".$db_tab['auktionen']." WHERE enddate >= NOW()  ORDER BY kategorie DESC");

enddate und NOW miteinander verglichen (größer gleich), aber da wird mir dann gar nichts angezeigt... Wichtig ist auch noch, dass später etwas passieren soll, wenn das Datum abgelaufen ist... Der User soll benachrichtig werden darüber...

Danke fürs lesen.
 
Werbung:
Welchen Datentyp hat denn bei dir die Spalte "enddate"? Wenn es DATETIME oder DATE ist, müsste der Vergleich mit NOW() richtig funktionieren. Wenn es UNIX_TIMESTAMP ist, dann musst Du nicht mit NOW() sondern mit UNIX_TIMESTAMP() vergleichen.
 
Er hat den Typ TIMESTAMP. ABer ich kanns eigentlich umstellen, noch sind keine wichtigen Daten da drinnen vorhanden.
 
Werbung:
Welche Datentyp Du nimmst ist in diesem Fall eigentlich egal. Lass es so und pass nur die Statements entsprechend an.
 
...etwas passieren soll, wenn das Datum abgelaufen ist

Noch was dazu:
Du hast auch ein Logikfehler drin. >= groesser gleich vergleicht bei dir das Enddatum welches in der Zukunft liegen muss oder genau jetzt ist. Aber du willst ja die Abgelaufenen Einträge finden, daher muss es kleiner als <= lauten.
 
Ich möchte, dass die abgelaufenen einträge nicht einer liste erscheinen und das tut es jetzt, ich sehe alle aktuellen Einträge.

Wenn das Datum nun abgelaufen ist, soll der User aber benachrichtigt werden. Lässt sich das nur über einen CRONJOB lösen? Oder bin ich da auf dem falschen dampfer? Beschäftige mich grad zum ersten mal mit so Datumsgeschichten.
 
Werbung:
Lässt sich das nur über einen CRONJOB lösen?
Nein, nicht nur. Du kannst die Abfrage in eine Funktion schreiben und die Funktion beispielsweise immer dann aufrufen wenn sich ein User einloggt.

Vom Ablauf sähe das so aus:

Ein User loggt sich ein

  • Checken der abgelaufenen Auktionen(ich denke darum geht es)
  • Zu abgelaufenen Auktionen User und seine Email aus Datenbank heraussuchen
  • Solange User gefunden werden E-Mail rausschicken
  • Eintrag über gesendete Benachrichtigung in Datenbank vermerken
Weiter mit eingeloggten User

Nachteil:
Wenn sich viele User nahezu gleichzeitig anmelden, wird die Funktion aufgerufen obwohl es nicht notwendig wäre, das müsste man durch eine zusätzliche Abfrage evtl. verhindern.

Wenn sich über längere Zeit keine User angemeldet haben, kann unter Umständen eine lange Wartezeit beim Einloggvorgang eines sich dann anmeldenden Users entstehen, da ja erst alle E-Mails versendet werden müssen, bevor er endlich eingeloggt ist. Ein Cronjob wäre hier wohl besser.
 
Hmm ich hab noch nie einen Cronjob angelegt, aber wenn ich das richtig sehe, dann gehe ich fast so vor wie in der anzeige der AKTIVEN Auktionen, nur eben das ich eine datei erstelle, die einträge raussuche die eben nicht mehr aktiv sind, und jeweils den user (die das eingetragen haben, deren id wird mitgespeichert) eine PN senden lasse? Werd ich mal probieren ob ich so hinkomme xD

EDIT: Ja habs hinbekommen :D
 
Zuletzt bearbeitet:
Zurück
Oben