Seite 1 von 2

Daten abhängig von Datum löschen

Verfasst: 15.08.2008 16:26
von TLoD
Hallo Ihr,

ich mache scheinbar schon wieder alles falsch...
Ich möchte Daten aus einer Table in abhängigkeit einer Zeit löschen.

z.B. lösche alle Daten älter als 30 Tage

Dazu habe ich folgendes geschrieben:

Code: Alles auswählen

<?php
	
	checkSessionOn('KommentareLoeschen');
	
        if(isset($_POST['kommentareloeschen']) AND "l&ouml;schen" == $_POST['kommentareloeschen']) {
	echo "<p>\n";
        echo "    Eintr&auml;ge wurden gel&ouml;scht.\n";
        echo "</p>\n";
		$sql = "DELETE FROM
                   ".COMMENTS."
                WHERE
                   Datum <= '".$_POST['date']."'";
        mysql_query($sql) OR die(mysql_error());
    }

    echo "<table border=\"0\">
                  <colgroup>
                        <col height=\"4\">
                </colgroup>
                <tr><td></td></tr>
                </table>";

        echo "<table border=\"1\" width=\"70%\">
                  <colgroup>
                        <col height=\"4\">
                  </colgroup>
                        <tr align=\"center\"><td><b><span style=\"color:#007ebf\">Kommentare l&ouml;schen</span></b></td></tr>
                  </table>";
	echo "<b><span style=\"color:#b10505\">Under Construction...</span></b>";

        echo "<form action=\"scanliste.php?section=adminbereich&action=kommentareloeschen\" method=\"post\" class=\"formular\">\n";
        echo "<tr>\n";
        echo "<td>Kommentare, die &auml;lter sind als</td>\n";
        echo "            <td>\n";
        echo "            <select size=\"1\" name=\"Tage\" id=\"name\">\n";
        echo "                  <option value=\"604800\">07</option>\n";
        echo "                  <option value=\"864000\">10</option>\n";
        echo "                  <option value=\"1728000\">20</option>\n";
        echo "                  <option value=\"2592000\">30</option>\n";
        echo "            </select>\n";
        echo " Tage\n";
        echo "            </td>\n";
        echo "<td align=\"center\">\n";
        echo "<input type=\"submit\" name=\"kommentareloeschen\" value=\"l&ouml;schen\" />\n";
        echo "<input type=\"hidden\" name=\"date\"  value=\"Tage\">\n";
        echo "</td></tr></form>\n";

?>
Nun funktionier da aber nichts.
Ich denke eines meiner Problem ist, das ich den Wert der Tage nicht richtig übergebe und dann habe ich wohl auch noch das Problem, das ich bei WHERE... eine "datetime" mit Sekunden vergleichen will.

Ich hoffe Ihr könnt mir helfen und danke schon mal für Eure Antworten.

Verfasst: 15.08.2008 16:36
von Dr.Death
Kurze Frage, aber was soll das hier darstellen?

Code: Alles auswählen

AND "l&ouml;schen"
Soll das eine Variable sein ?
Wenn ja, wo kommt die her?

Variablen fangen immer mit einem $ Zeichen an.

Beispiel:

$loeschen

Ausserdem sollten Variablennamen keine Sonderzeichen/Umlaute enthalten....

Zudem würde ich die Erfolgsmeldung des Löschvorgangs erst nach dem tatsächlichen Löschen ausgeben...und nicht vorher :o

Verfasst: 15.08.2008 16:48
von TLoD
das AND "l&ouml;schen" kommt aus der viertletzten zeile
und die erfolgsmeldung kommt doch nur wenn die if abfrage passt und dann wird ja auch nur gelöscht.

Verfasst: 15.08.2008 17:10
von Dr.Death
Vielleicht so:

Code: Alles auswählen

if( $_POST['kommentareloeschen'] )
{
	$sql = 'DELETE FROM ' .COMMENTS. ' 
			WHERE 	Datum <= ' . $_POST['Tage'];
	mysql_query($sql) OR die(mysql_error());
	
	echo "<p>\n";
	echo "    Eintr&auml;ge wurden gel&ouml;scht.\n";
	echo "</p>\n";
} 
Der Value ist ja nur der angezeigte Button Name.... und wird weiter nicht verwertet.
Das hidden Input Feld brauchst Du nicht, da Du ja eine Selectbox mit übermittelst.

Verfasst: 15.08.2008 17:29
von TLoD
DANKE!

Etz habe ich nur ein Problem - statt der Einträge die älter als 30 Tage sind, habe ich gerade alle gelöscht :o :o :o

Was mache ich denn nu wieder falsch?

Code: Alles auswählen

<?php
	
	checkSessionOn('KommentareLoeschen');
	
        if(isset($_POST['kommentareloeschen'])) {
		$sql = "DELETE FROM
                   ".COMMENTS."
                WHERE
                   Datum <= '".$_POST['Tage']."'";
        mysql_query($sql) OR die(mysql_error());

        echo "<p>\n";
        echo "    Eintr&auml;ge wurden gel&ouml;scht.\n";
        echo "</p>\n";
    }

    echo "<table border=\"0\">
                  <colgroup>
                        <col height=\"4\">
                </colgroup>
                <tr><td></td></tr>
                </table>";

        echo "<table border=\"1\" width=\"70%\">
                  <colgroup>
                        <col height=\"4\">
                  </colgroup>
                        <tr align=\"center\"><td><b><span style=\"color:#007ebf\">Kommentare l&ouml;schen</span></b></td></tr>
                  </table>";
	echo "<b><span style=\"color:#b10505\">Under Construction...</span></b>";

        echo "<form action=\"scanliste.php?section=adminbereich&adminsection=kommentareloeschen\" method=\"post\" class=\"formular\">\n";
        echo "<tr>\n";
        echo "<td>Kommentare, die &auml;lter sind als</td>\n";
        echo "            <td>\n";
        echo "            <select size=\"1\" name=\"Tage\" id=\"name\">\n";
        echo "                  <option value=\"604800\">07</option>\n";
        echo "                  <option value=\"864000\">10</option>\n";
        echo "                  <option value=\"1728000\">20</option>\n";
        echo "                  <option value=\"2592000\">30</option>\n";
        echo "            </select>\n";
        echo " Tage\n";
        echo "            </td>\n";
        echo "<td align=\"center\">\n";
        echo "<input type=\"submit\" name=\"kommentareloeschen\" value=\"l&ouml;schen\" />\n";
        echo "</td></tr></form>\n";

?>

Verfasst: 15.08.2008 17:38
von Dr.Death
Öhm... du hast alle gelöscht weil Du das Datum nicht berechnet hast.

Code: Alles auswählen

$jetzt = time();
Zu löschende Einträge =

Code: Alles auswählen

$datum = time() - $jetzt ;
Vielleicht solltest Du vorher die SQL Abfrage rausnehmen und erstmal die DAtumsvariable per echo anzeigen lassen ;-)

Verfasst: 15.08.2008 17:54
von TLoD
also ich raff das grad nicht :cry:

du sachts was wir für ne zeit haben aber dann definierst du das datum durch istzeit minus istzeit ?!?!

wärst du evtl so nett und würdest das mir eben in meinen oben stehenden code einfügen?

besten dank!

Verfasst: 15.08.2008 17:57
von Boecki91
Ich habes gerade überflogen....

SQL-Injections bekannt?

Wenn nein, unbedingt nachschauen.
Wenn ja, wo ist der Schutz?

Verfasst: 15.08.2008 18:12
von Dr.Death
Ich war gerade etwas abgelenkt ;-)

Code: Alles auswählen

$jetzt = time();
Zu löschende Einträge =

Code: Alles auswählen

$datum = $jetzt - $_POST['Tage'];
Ich musste gerade nur lachen über dieses Video...sorry : http://www.lpi-clan.de/viewtopic.php?f=2&t=3716

Der obige Code ist ja nur ein Beispiel.... Du musst ja das übergebene Datum ( sind ja nur Sekunden ) von dem in der Datenbank eingetragenen Wert abziehen bzw. von der aktuellen Zeit.

...und Boeki hat Recht.... bevor Du die DAten vom $_POST an die DAtenbank lässt solltest Du sie escapen usw...

Verfasst: 15.08.2008 18:13
von TLoD
Das hier überprüft ob du eingeloggt bist und ob du das entsprechende Recht hast.
checkSessionOn('KommentareLoeschen');
Nur weiß ich noch immer nicht wie ich die Zeitberechung mache.
In die WHERE Abfrage bring ich es wohl nicht rein, den Vorschlag meines Vorredners raff ich nicht.

*edit* gerafft - kollege hatte antwort gepostet wärend ich getippt hatte ;)