1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Daten nach ein Bestimmte lebensdaur automatisch gelöscht

Dieses Thema im Forum "PHP" wurde erstellt von Henrigo007, 19. September 2016.

  1. Henrigo007

    Henrigo007 Mitglied

    Hallo Leute,

    ich möchte die Daten nach einem Bestimmten Lebensdauer aus der Tabelle (variants) löschen ich habe dafür den Datensatz ts genannt und als timestamp definiert so sieht das aus,ich weise darauf hin, jede variant hat eine eindeutige id.

    ts timestamp
    on update CURRENT_TIMESTAMP Nein CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

    ich habe das script so implementiert wie unter steht, leider klappt es nicht nach 2 Minuten (120 Sekunden) die daten zu löschen.
    PHP:
    1. <?php
    2. require_once __DIR__ . '/connection.php';
    3.  
    4. $variants_remove='SELECT * FROM variants';
    5.  
    6. $req = $dbConnect->query($variants_remove);
    7.  
    8.  
    9.  
    10. while ($remove = $req->fetch(PDO::FETCH_ASSOC))
    11. {
    12.     $datum = $remove['ts'];
    13.     $aktuelleDatum = time();
    14.     $differenz = $datum - $erstellungsDatum;
    15.     $lebensdauerInSekunden = 120;
    16.     if ($differenz > $lebensdauerInSekunden)
    17.     {
    18.     $id = $remove['id'];
    19.     mysql_query('DELETE FROM variants WHERE id='$id'');
    20.     }
    21. }
    22.  
    23. ?>
    kann jemandem mir helfen.
    Danke im Voraus.
    http://localhost/phpmyadmin/tbl_structure.php?db=kantteile&table=variants&token=61730fcaa52ea40a3c09a451d2204abe&goto=tbl_structure.php&back=tbl_structure.php&field=ts&change_column=1
     
  2. Fragenfrager

    Fragenfrager Erfahrenes Mitglied

    Die Zeile $differenz = $datum - $erstellungsDatum; ist falsch. Es müsste $differenz = $aktuellesDatum - $datum; sein, denn $erstellungsDatum hast Du nirgends befüllt.
     
  3. Henrigo007

    Henrigo007 Mitglied

    ich habe geändert, leider klappt es nicht, ich habe die folgende Daten heute um 08:22:04 und 08:23:23 erzeugt, es sollte eigentlich von meiner Tabelle gelöscht werden

    INSERT INTO `variants` ( `a`, `b`, `c`, `d`, `e`, `alpha`, `beta`, `ts`) VALUES
    ( 123, 120, 56, 500, 448, 900, 789, '2016-09-19 08:22:04'),
    ( 23, 589, 56, 768, 800, 28, 789, '2016-09-19 08:23:23');


    PHP:
    1. <?php
    2. require_once __DIR__ . '/connection.php';
    3. $variants_remove='SELECT * FROM variants';
    4. $req = $dbConnect->query($variants_remove);
    5. while ($remove = $req->fetch(PDO::FETCH_ASSOC))
    6. {
    7.     $datum = $remove['ts'];
    8.     $aktuelleDatum = time();
    9.     $differenz = $aktuelleDatum - $datum;
    10.     $lebensdauerInSekunden = 120;
    11.     if ($differenz > $lebensdauerInSekunden)
    12.     {
    13.     $id = $remove['id'];
    14.     mysql_query('DELETE FROM variants WHERE id='$id'');
    15.     }
    16. }
    17. ?>
     
  4. Bratkartoffel

    Bratkartoffel gebratene Kartoffel Premium-User

    Hi,

    bei deinem Script fallen mir gleich mehrere "Unschönheiten" auf:
    - Du verwendest die deprecated mysql_* Funktionen. Diese wurden mit PHP 7 entfernt!
    - Du führst einen SELECT, und für jeden Treffer einen einzelnen DELETE aus. Das ist äusserst unperformant und kann auch innerhalb einer SQL-Query erledigt werden. Ausserdem selektierst du Daten (*), welche du gar nicht brauchst.
    - Du vermischt hier SQL-Timestamp und PHP-time(). time() liefert die Anzahl der Sekunden seit der Unix-Epoch, SQL-Timestamp ist allerdings (quasi) ein String

    Schau dir mal die MySQL-Datefunctions an und überlege dir, wie du das Script oben als eine Query (DELETE FROM variants WHERE ts < xxxxxx) abfeuern kannst.

    Grüsse,
    BK

    Als Hint kann ich dir hier die DATE_SUB-Funktion empfehlen.
     
    Zuletzt bearbeitet: 19. September 2016
    Stefanen gefällt das.
  5. Fragenfrager

    Fragenfrager Erfahrenes Mitglied

    1) Was Bratkartoffel sagt
    2) Zwischen 08:22:04 und 08:23:23 liegen doch nur 79 Sekunden?!
     
  6. Henrigo007

    Henrigo007 Mitglied

    Nein ich habe ein um 08:22:04
    und der zweite um 08:23:23, dh wenn alles korrekt wäre, sollte die beide nicht mehr in meine Tabelle existieren
     
  7. Henrigo007

    Henrigo007 Mitglied

    was mache ich denn falsch hier ?

    PHP:
    1. <?php
    2. require_once __DIR__ . '/connection.php';
    3.  
    4. $datum = date('Y-m-d', $daten['ts']);
    5. $variants_remove='DELETE FROM variants  WHERE "$datum" < DATE_SUB(CURRENT_DATE,INTERVAL 2 MINUTE)';
    6. $req = $dbConnect->query($variants_remove);
    7. $daten = $req->fetch(PDO::FETCH_ASSOC);
    8. ?>
     
  8. Henrigo007

    Henrigo007 Mitglied

    Kann keine mir hier helfen ?
     
  9. Bratkartoffel

    Bratkartoffel gebratene Kartoffel Premium-User

    Hallo Henrigo007,

    in deinem obigen Code verweist du auf $daten['ts'], welches aber anscheinend nirgends definiert wird.
    Dein SQL ist schon fast richtig:
    Code (SQL):
    1. DELETE FROM variants  WHERE ts < DATE_SUB(NOW(), INTERVAL 2 MINUTE)
    Ich weiss nicht, ob deine "query"-Methode auf deiner Connection das macht, was ich vermute (kann die auch UPDATEs?), aber das
    $req->fetch(PDO::FETCH_ASSOC) ist definitiv falsch. Was erwartest du von einem DELETE?

    Folgende Seite beschreibt, wie du mit verschiedenen Methoden ein DELETE Statement abschicken kannst:
    http://www.w3schools.com/php/php_mysql_delete.asp

    Grüsse,
    BK
     
  10. Henrigo007

    Henrigo007 Mitglied

    auch so klappt es leider nicht

    PHP:
    1. <?php
    2. require_once __DIR__ . '/connection.php';
    3.  
    4. $daten = $_POST['ts'];
    5.  
    6. $datum = date('Y-m-d', $daten);
    7. $variants_remove='DELETE FROM variants  WHERE "$datum" < DATE_SUB(CURRENT_DATE,INTERVAL 2 MINUTE)';
    8. $req = $dbConnect->query($variants_remove);
    9. $daten = $req->fetch(PDO::FETCH_ASSOC);
    10. ?>
     
  11. Bratkartoffel

    Bratkartoffel gebratene Kartoffel Premium-User

    Hi,

    bitte lies dir meinen Post nochmal durch, schau dir mein SQL an und gleiche das mit deiner Problembeschreibung ab.
    Wo kommt jetzt das $_POST['ts'] her?
    Warum ist in dem SQL das $datum von "" umschlossen? Warum gibt das einen Syntaxfehler?
    Warum willst du den Timestamp unbedingt von aussen reingeben?
    Was macht deine $dbConnect->query()?
    Warum verwendest du CURRENT_DATE? (Als Konstante, nicht als Funktion?) Warum ist das für dein Problem das falsche?
    Warum postest du nur "Es geht nicht" und keine MySQL-Fehlermeldungen? (error, errno)

    Grüsse,
    BK
     
    Zuletzt bearbeitet: 20. September 2016
  12. Henrigo007

    Henrigo007 Mitglied

    gute Frage mein error log ist leer
     
  13. Bratkartoffel

    Bratkartoffel gebratene Kartoffel Premium-User

    Hi,

    die Fehlermeldungen landen nicht im Mysql-Log, sondern können über deine Connection abgeholt werden:
    http://jason.pureconcepts.net/2013/04/common-debugging-php-mysql/
    http://www.peterkropff.de/site/php/mysqli_fehler.htm
    http://stackoverflow.com/a/15275823/1164913

    Bitte lasse dir nicht alle Informationen aus der Nase ziehen. Solang du nicht meine Posts durchgehst und (alle) meine Fragen beantwortest werde ich hier nichts mehr schreiben. Ich habe weder Zeit, noch Lust weiterhin in meiner Glaskugel nach deinem Fehler zu suchen.

    Grüsse,
    BK
     
    sheel gefällt das.
  14. Henrigo007

    Henrigo007 Mitglied

    Sorry, ich bin sehr gut an meiner Datenbank verbunden, Ich bin zwar neuer in Php aber ich glaube das ist was alle hier können.
    Sonst vielen Dank für deine Mühe
     
  15. Henrigo007

    Henrigo007 Mitglied

     
Die Seite wird geladen...