Daten nach X Zeit löschen...

deintag85

Erfahrenes Mitglied
Hallo,

ich habe ein kleines Uploadscript bei dem User angeben können wie lange die Datei auf meinem System bleiben soll. Er hat die Auswahl zwischen 7, 30 und 90 Tagen.

In der Datenbank hab ich nun dafür zwei Spalten vorgesehen.

Zum Einen eine Spalte "Speicherzeit" mit VARCHAR in der dann die Zahl X drin steht.
Zum Anderen eine Spalte "Eintragungsdatum" mit date in der die Funktion NOW() benutzt wird.

Wie kann ich nun mit einer PHP-SQL Funktion die gesamte Datenbank durchlaufen? Also dass er sich sozusagen jede Zeile vornimmt und schaut, ob das Eintragungsdatum im Vergleich vom heutigen Datum grösser als X ist?

Kann mir da jemand weiterhelfen?

Liebe Grüße
 
Hallo,

ich habe ein kleines Uploadscript bei dem User angeben können wie lange die Datei auf meinem System bleiben soll. Er hat die Auswahl zwischen 7, 30 und 90 Tagen.

In der Datenbank hab ich nun dafür zwei Spalten vorgesehen.

Zum Einen eine Spalte "Speicherzeit" mit VARCHAR in der dann die Zahl X drin steht.
Zum Anderen eine Spalte "Eintragungsdatum" mit date in der die Funktion NOW() benutzt wird.

Wie kann ich nun mit einer PHP-SQL Funktion die gesamte Datenbank durchlaufen? Also dass er sich sozusagen jede Zeile vornimmt und schaut, ob das Eintragungsdatum im Vergleich vom heutigen Datum grösser als X ist?

Kann mir da jemand weiterhelfen?

Liebe Grüße

- Warum trägst du nicht beim Speichern des Datensatzes gleich das Löschdatum ein ? Also wenn der Benutzer den Datensatz speichert, wird "Aktuelles Datum" plus "gewählte Frist" in ein Feld "Löschdatum" eingetragen. Mit Select ... from myTable WHERE Löschdatum < "HeutigesDatum" kriegst du die Row's, welche das Verfalldatum erreicht haben

Gruss
 
Hi,
um nochmal auf mein Problem zurückzukommen, weil ich jetzt seit mehreren Stunden daran sitze.

Hab nun folgendes probiert

Code:
$heutigesdatum = date("d.m.Y",$timestamp);


$abfrage = "SELECT * FROM `img` WHERE speicherzeit < '$heutigesdatum'";
$ergebnis = mysql_query($abfrage) OR die(mysql_error());

while($row = mysql_fetch_object($ergebnis))
{
unlink() // Dateien löschen etc....

}

Jedoch gibt er mir JEDE zeile aus, egal welches Datum ich als heutiges Datum benutze.

Woran kann das Problem liegen? "Speicherzeit" ist VARCHAR. Kann es daran liegen?

Ich will halt eine Art Schleife, die alle Zeilen raussucht, inder das Löschdatum kleiner als das heutige Datum ist. Anschließend soll er die Zeile löschen und von meinem Server die Daten löschen....

Ich kriege aber die SQL Funktion nicht ganz gebacken.

Kann mir da jemand helfen?

Sry für Doppelpost.
 
Versuch es mal anders.

Du benutzt einen UNIX-Timestamp. Sind nur Zahlen und damit lässt sich viel leichter arbeiten.

Die Spalte "Uploaddatum" und dei Spalte "Löschdatum" wandelst du in int(11) um.
Uploaddatum füllst du beim Eintragen mit
SQL:
UNIX_TIMESTAMP()
, und Löchdatum mit
SQL:
UNIX_TIMESTAMP() + (Haltbarkeitstage * 60 * 60 *24)
.

Die Abfrage würde dann lauten:

SQL:
SELECT * FROM tabelle WHERE `LÖSCHDATUM` < UNIX_TIMESTAMP();

Bums fertig.
Ach ja verwende nach Möglichkeit,anders als ich gerade, keine deustchen Umlaute in den Tabellen-,Datenbank- etc. namen.
 
Zuletzt bearbeitet von einem Moderator:
Versuch es mal anders.

Du benutzt einen UNIX-Timestamp. Sind nur Zahlen und damit lässt sich viel leichter arbeiten.

Die Spalte "Uploaddatum" und dei Spalte "Löschdatum" wandelst du in int(11) um.
Uploaddatum füllst du beim Eintragen mit
SQL:
UNIX_TIMESTAMP()
, und Löchdatum mit
SQL:
UNIX_TIMESTAMP() + (Haltbarkeitstage * 60 * 60 *24)
.

Die Abfrage würde dann lauten:

SQL:
SELECT * FROM tabelle WHERE `LÖSCHDATUM` < UNIX_TIMESTAMP();

Bums fertig.
Ach ja verwende nach Möglichkeit,anders als ich gerade, keine deustchen Umlaute in den Tabellen-,Datenbank- etc. namen.

ich habs nun mit einem kleinen PHP code (while etc..) gemacht und es scheint zu funktionieren. trotzdem danke für die hilfe!!
 
Zuletzt bearbeitet von einem Moderator:
geht natürlich nur zur lasten der geschwindigkeit, aber auch eine möglichkeit.

wir haben gerne geholfen
 
Zurück