PHP Vergangene Datensätze in Tabelle verschieben

  • PHP

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Orion.

    PHP Vergangene Datensätze in Tabelle verschieben

    Tag zusammen,

    Da ich schon gerade dabei bin frage ich noch was bezüglich PHP und SQL.
    Ich hab eine Tabelle welche mit PHP nach Termin(Datum) sortiert ausgegeben wird. Nun sollte ich natürlich vergangene Termine entfernen. Wie kann ich das am einfachsten realisieren? Ich hab mir gedacht das beim Seiten reload das aktuelle Datum gelesen wird und wenn das Datum des Termins kleiner ist als das aktuelle wird der Satz in die History-Tabelle verschoben aber irgendwie krieg ich das nicht ganz hin. Ich hab auch irgendwie ein durcheinander bekommen mit SQL und PHP. Kann mir wer helfen? Meine Schleifenüberlegung sieht so aus:

    PHP-Quellcode

    1. $hist="
    2. INSERT INTO history (Erstelldatum,Info,Kunde,Notiz,Termin,Zeit)
    3. SELECT Erstelldatum,Info,Kunde,Notiz,Termin,Zeit
    4. FROM satz;
    5. DELETE FROM satz;
    6. COMMIT;";
    7. $strSQL = "SELECT Erstelldatum,Info,Kunde,Notiz,Termin,Zeit FROM satz ORDER BY Termin ASC";
    8. $rs = mysql_query($strSQL);
    9. $rs2 = mysql_query($strSQL);
    10. $datenow = "CURDATE();";
    11. while($row2 = mysql_fetch_array($rs2)) {
    12. if ($datenow > date("d.m.Y", strtotime($row2['Termin']))) {
    13. mysql_query($hist);
    14. }
    15. }


    Später wird dann die Tabelle so ausgegeben falls man die Sätze da direkt aussortieren kann wärs natürlich noch besser, glaub ich jedenfall:

    PHP-Quellcode

    1. echo "<table class='table table-striped' style='width:95%; font-size:24px;'><tbody><tr><td>Erstelldatum</td><td>Termin</td><td>Info</td><td>Zeit</td><td>Kunde</td><td>Notiz</td>";
    2. while($row = mysql_fetch_array($rs)) {
    3. echo "<tr><td style='width: 15%;'>". date("d.m.Y", strtotime($row['Erstelldatum'])) . '</td>';
    4. echo "<td style='width: 15%;'>". date("d.m.Y", strtotime($row['Termin'])) . '</td>';
    5. echo "<td style='width: 6%;'>".$row['Info'] . '</td>';
    6. echo "<td style='border-right: 10px solid #ddd; width: 5%;'>".$row['Zeit'] . '</td>';
    7. echo "<td>".$row['Kunde'] . '</td>';
    8. echo "<td>".$row['Notiz'] . '</td><tr>';
    9. }
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Ahoi,

    was heißt denn, du bekommst das nicht hin? Werden denn zur Zeit vielleicht alle Datensätze in "history" geschrieben?
    In deiner Sub-Select würde ich eine Where-Klausel gut machen, somit kannst du gleich alle Datensätze selektieren, die kleiner sind als das Datum. Dafür brauchst du keine If im PHP.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Naja, in der Datenbank tut sich gar nichts. Wenn ich das als Where Klausel machen würde, wie selektiere ich dann where? Das wäre ja dann in der Art mit WHERE CURDATE(d.m.Y) > Termin. Hier ist eben noch das Problem das ich nicht genau weiss welches Datumsformat ich jetzt nehmen muss. Ich ziehe ja mit . date das Datum aus der Datenbank und zu Beginn der Klammer setz ich das Anzeigeformat "d.m.Y". Ich hab hier irgendwie den Überblick verloren wie ich das mit dem Datum und Format jetzt anordnen muss ums richtig zu vergleichen. Darum funktionierts vermutlich auch nicht.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    In der Datenbank stehen die Termine in diesem Format 2028-09-20 ich denke das ist YYYY-DD-MM oder?
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Da es keinen 20. Monat gibt, wäre deine Schlussfolgerung wohl richtig ;) ....
    Ich wollte eigentlich eher wissen, wie die Spalte definiert ist, mit welchem Typ.

    Versuch es mal mit dieser Query

    SQL-Abfrage

    1. INSERT INTO history (Erstelldatum,Info,Kunde,Notiz,Termin,Zeit)
    2. SELECT Erstelldatum,Info,Kunde,Notiz,Termin,Zeit
    3. FROM satz
    4. WHERE Termin < ?


    Und im PHP setzt du dann so den Wert für den Paramter (? - Parameter)

    PHP-Quellcode

    1. $hist->bind_param('s', date('Y-m-d'));


    Achtung ich verwende hier MySqli ... solltest du übrigens auch.
    Die SQL-Query macht eigentlich genau das was du machen möchtest. Die Query noch ausführen und dann noch den Delete auf die alten Daten und fertig.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hi,

    1) wieso sollten vergangene Termine gelöscht werden?
    2) Schmeiß die alten mysql_* Funktionen über Bord. Bitte mit PDO arbeiten
    3) Backticks verwenden

    Vergleich doch einfach ob das Datum in der DB gleich dem aktuellen heutigen Datum ist. Wie wird das Datum gespeichert? Als Timestamp? Oder als DateTime (YYYY-MM-DD HH:ii:ss)?

    Aber als erstes bitte Code ausmisten. Scheint mir als hättest du da einen redundanten Spaghetticode.

    Link :thumbup:
    Hello World
    Es ist schlussendlich eine Webapp in der man kurz einen Satz erfassen soll mit Abholterminen und wenn der Termin durch ist, soll der Satz eben in eine History geschoben werden, so das man auf der Anzeigetafel mit den Terminen zuoberst immer den nächsten Termin sieht und nicht die vergangenen. Im moment ist es wichtig das ich eine temporäre funktionelle Lösung habe. Den Code aufräumen und säubern kann ich im Nachhinein noch per Updates. Die Webapp soll ein System ersetzen welches abgeraucht ist, darum sollte ich wennmöglich was aufbauen. Ich hab gesagt das PHP mit SQL nicht in meinen Kompetenzen liegt und ich mir das im Laufe der Entwicklung anschauen müsste. Es hiess das wär in Ordnung und wenns Downtimes geben soll bei der Verbesserung und so weiter soll ich diese nur vorankündigen.

    EDIT: Habs hingekriegt, in der Datenbank waren noch ein paar Einstellungen der Zeilen falsch.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Orion“ ()