Daten abhängig von Datum löschen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Daten abhängig von Datum löschen

Beitrag 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.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag 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
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag 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.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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";

?>
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag 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 ;-)
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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!
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Ich habes gerade überflogen....

SQL-Injections bekannt?

Wenn nein, unbedingt nachschauen.
Wenn ja, wo ist der Schutz?
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag 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...
Zuletzt geändert von Dr.Death am 15.08.2008 18:13, insgesamt 1-mal geändert.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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 ;)
Zuletzt geändert von TLoD am 15.08.2008 18:20, insgesamt 1-mal geändert.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Antworten

Zurück zu „Coding & Technik“