Antworten auf deine Fragen:
Neues Thema erstellen

Mit PHP Einträge aus SQL nach X Tagen löschen

MasterT

Nicht mehr ganz neu hier

Hallo,
ich habe eine Tabelle in denen die Einträge mit einem Datum in dem Format YYYY-MM-DD gespeichert sind.

Ich möchte nun diese Einträge nach 2 Monaten löschen, damit die Datenbank nicht überflutet wird.
Leider habe ich noch gar keine Vorstellung wie ich das umsetzen könnte. Kann mir jemand erklären wie ich das machen könnte bzw. ein Beispiel zeigen?

Freundliche Grüße
 

hub

nicht ganz neu hier

AW: Mit PHP Einträge aus SQL nach X Tagen löschen

Moin moin,
du kannst ja per cronjob ein PHP-Script z. B. alle 24 Stunden laufen lassen, das eine SQL-Anweisung ausführt. Die SQL-Anweisung könnte so aussehen:
HTML:
DELETE FROM deine_tabelle WHERE DATEDIFF(NOW(), dein_datumsfeld) > 60
Das würde jetzt alles löschen, was älter als 60 Tage ist.

Gruß Ulli
 

holgermerz

Nicht mehr ganz neu hier

AW: Mit PHP Einträge aus SQL nach X Tagen löschen

Hallo,
über eine SQL Abfrage mit "DELETE FROM [tabelle] WHERE [datum] <='$vorZweiMonaten'"

in der Variablen $vorZweiMonaten steht das Datum von heute - 2 Monate. Dieses bestimmst du am besten mit der mktime-Funktion von PHP.

PHP
$vorZweiMonaten=date("Y-m-d", mktime(0,0,0,date("m")-2,date("d"),date("Y")));

Du kannst das aber auch schnell über eine SQL Funktion lösen:

"DELETE FROM [tabelle] WHERE [datum] <=DATE_SUB(NOW(), INTERVAL 60 DAY)";

Diese Abfrage baust du am Beginn deiner index.php ein. Bei jedem Aufruf wird die Abfrage ausgeführt.
Oder über einen Cronjob, der täglich zu einem bestimmten Zeitpunkt aufgerufen wird.
 

MasterT

Nicht mehr ganz neu hier

AW: Mit PHP Einträge aus SQL nach X Tagen löschen

Vielen Dank für eure Antworten!
Ganz kurz noch, wisst ihr wie ich ein INSERT Befehl eleganter auf zwei Tabellen durchführen lassen kann als ich es hier gemacht habe?

PHP:
        mysql_query("INSERT INTO benutzer SET 
                        passwort='".hash('sha256',$_POST['passwort'])."',
                        securitycode='".$securitycode."',
                        username='".$username."',
                        vorname='".ucfirst($vorname)."',
                        nachname='".ucfirst($nachname)."'")
                        OR die ("Beim speichern des Benutzers ist ein Fehler aufgetreten! Bitte wenden Sie sich an den Administrator");
                        
        mysql_query("INSERT INTO benutzer_rechte SET
                        besitzer='".$securitycode."',
                        lagerbestand='".$la."',
                        lagerbestand_veraendern='".$lav."',
                        artikel='".$a."',
                        artikel_anlegen='".$aa."',
                        artikel_bearbeiten='".$ab."',
                        artikel_loeschen='".$al."',
                        hersteller='".$h."',
                        hersteller_anlegen='".$ha."',
                        hersteller_bearbeiten='".$hb."',
                        hersteller_loeschen='".$hl."',
                        hersteller_inventur='".$hi."',
                        logbuch='".$l."',
                        logbuch_downloaden='".$ld."',
                        benutzer='".$b."',
                        benutzer_loeschen='".$bl."',
                        benutzer_bearbeiten='".$bb."',
                        benutzer_anlegen='".$ba."'") 
                    OR die ("Beim speichern des Benutzers ist ein Fehler aufgetreten! Bitte wenden Sie sich an den Administrator");
                    weiterleitung('?seite=benutzer');exit;
 

Duddle

Posting-Frequenz: 14µHz

AW: Mit PHP Einträge aus SQL nach X Tagen löschen

Du kannst mit einem INSERT Daten nicht gleichzeitig in mehrere Tabellen einfügen, falls du das mit "eleganter" meinst. Du könntest beide Anfragen in eine Transaktion packen, damit nur entweder beide oder keine Datensätze eingefügt werden.
Ansonsten passt das (bis auf die unschönen Variablennamen).


Duddle
 

MasterT

Nicht mehr ganz neu hier

AW: Mit PHP Einträge aus SQL nach X Tagen löschen

Danke für euren Info´s. Ihr wart wieder sehr schnell und hilfsbereit!

@Duddle Danke für deine Info´s und meine Variablennamen sind schön :D
 

Curanai

Aktives Mitglied

AW: Mit PHP Einträge aus SQL nach X Tagen löschen

Ich empfehle das dringende Überdenken der INSERTS ... so bin ich (fiktiv) Burger-Fabrikant aka "Restaurant zur goldenen Möwe" und demnach steht bei mir als Hersteller "McDonald's". Führt er Query 2 aus (ist $h maskiert?)?

Die Variablennamen finde ich aber auch "schlecht gewählt". Und ich verstehe immer wieder nicht, warum MySQL beim INSERT oder UPDATE eines Zahlentypus mit einfachen Anführungszeichen konfrontiert werden müsse.

Übrigens: Je nach PHP-Setting kann in $_POST['passwort'] bereits eine Maskierung stattgefunden haben - anschließend kann sich der Benutzer nicht einloggen, da ein Zeichen mehr verschlüsselt wurde als ursprünglich eingegeben.

Da glüht die Leitung vom Support ... :D
 
Zuletzt bearbeitet:

afr0kalypse

Allwissendes Karmameerschweinchen!

AW: Mit PHP Einträge aus SQL nach X Tagen löschen

wenn du es etwas exakter als 60 tage haben willst, kannst du bei mysql auch ganz toll den befehl date_sub benutzen.
Code:
DELETE FROM deine_tabelle 
WHERE datumsfeld < (SELECT date_sub(NOW(), INTERVAL 2 month))
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.455
Mitglieder
67.558
Neuestes Mitglied
StarsMan
Oben