debitux Geschrieben 28. August 2003 Geschrieben 28. August 2003 Hallihallo, wie kann ich einen SQL Datensatz in einer MySQL Datenbank zu einem bestimmten Zeitpunkt automatisiert löschen? Schreib ich da besser ein Shellskript oder geht das auch mit php? Hab sowas noch nicht gemacht... Der Benutzer soll ein Löschdatum angeben. Gruß debitux Zitieren
arrayhunter Geschrieben 28. August 2003 Geschrieben 28. August 2003 hallo, eigentlich ist es nur mit Cronjobs möglich Einmal am Tag aber kannst Du bei scriptwecker einen kostenlosen Cronjob bekommen. http://www.scriptwecker.de/ eine andere Variante wäre , die DS dann zu löschen, wenn das Script auf der Seite angefordert wird (vom User) du lässt deinen cronjob(dein Script) einfach von den surfern auf der seite ausführen - einfach in einem 1x1px mini iframe. da wird der seitenaufbau net beeinträchtigt . Zitieren
kills Geschrieben 28. August 2003 Geschrieben 28. August 2003 oder einfach beim anstoßen des scriptes zuerst in die tabelle schauen und alles rausputzen und dann erst dein script weiter laufen lassen Zitieren
debitux Geschrieben 29. August 2003 Autor Geschrieben 29. August 2003 Hmmm ich glaub ein Cronjob wäre nicht schlecht. Aber wie kann ich per Shellskript auf eine MySQL Datenbank zugreifen? Hab das noch nie gemacht... Naja da muss ich mal wieder basteln ;-)... Gruß debitux Zitieren
Florian_K Geschrieben 29. August 2003 Geschrieben 29. August 2003 Hallo! Ungetestet würde ich folgende Syntax für sinnvoll halten: mysql database < sqlscript.sql Optional können noch Werte wie -uUsername und -p[password] hinzukommen. In dem SQL-Script schreibst du dann die Anweisung(en), die ausgeführt werden sollen. Gruß, Florian Zitieren
debitux Geschrieben 29. August 2003 Autor Geschrieben 29. August 2003 Ich bin gerade ein PHP Shellskript am schreiben. Das Skript soll jede 24h, einen Tag vom Löschdatum eines Datensatzes abziehen. Wenn das Löschdatum 0 ist, soll der Datensatz gelöscht werden (kling komisch, ist aber so.) Wie kann ich das am besten regeln? Ich muss das Skript bis am Montag fertig haben .... Gruß debitux Zitieren
Wolle Geschrieben 29. August 2003 Geschrieben 29. August 2003 Öhm.... Warum verteilst du deine Frage auf sämtliche Foren? Den aus dem Webdesign hab ich mal mit dem zusammengebaut (gibt dann auch wenigstens nen ausagekräftigen Threadtitel ) ... Zitieren
debitux Geschrieben 29. August 2003 Autor Geschrieben 29. August 2003 Jojo danke wolle :-). Ich hab das jetzt erstmal so mit dem php skript gemacht. <?php $daba = "neuedb"; $host = "localhost"; $user = "root"; $pass = ""; $sqls1 = "SELECT * FROM $daba"; $link=mysql_connect($host, $user, $pass) or die("Fehler, keine Verbindung"); mysql_select_db($daba); for($j=0;$j<2;$j++) { if($j==1) { $tbl = "tbl_suche"; } else { $tbl = "tbl_biete"; } $result = mysql_query("SELECT * FROM $tbl ORDER BY id DESC"); for($i=0;$i<mysql_num_rows($result);$i++) { $ergebnis[$i]=mysql_fetch_array($result); } $gesamt = count($ergebnis); for($i=0;$i<$gesamt;$i++) { echo "Name:\t\t".$ergebnis[$i][name]."\n"; echo "Vorname:\t".$ergebnis[$i][vname]."\n"; echo "Delday:\t".$ergebnis[$i][delday]."\n"; echo "Datum:\t".$ergebnis[$i][datum]."\n"; echo "\n\n"; } } ?> Jetzt ergänze ich nur noch sowas in der Art... for($i=0;$i<$gesamt;$i++) { echo "Name:\t\t".$ergebnis[$i][name]."\n"; echo "Vorname:\t".$ergebnis[$i][vname]."\n"; echo "Delday:\t".$ergebnis[$i][delday]."\n"; echo "Datum:\t".$ergebnis[$i][datum]."\n"; echo "\n\n"; if($ergebnis[$i][delday]>=1) { echo "Noch gueltig..."; ######SQL INSERT/REPLACE... } else { echo "Ungueltig..."; ######SQL DELETE } Dann müsste es doch klappen... Zitieren
debitux Geschrieben 29. August 2003 Autor Geschrieben 29. August 2003 So feddisch... Jetzt geh ich heim :-) Skript funzt.... <?php # Author: Martin Fandel # # Dieses Skript soll später als Cronjob jede # 24 h den delday einen runtersetzen. Wenn der delday # 0 ist, wird der datensatz gelöscht... $daba = "neuedb"; $host = "localhost"; $user = "root"; $pass = ""; $sqls1 = "SELECT * FROM $daba"; $link=mysql_connect($host, $user, $pass) or die("Fehler, keine Verbindung"); mysql_select_db($daba); for($j=0;$j<2;$j++) { if($j==1) { $tbl = "tbl_suche"; } else { $tbl = "tbl_biete"; } $result = mysql_query("SELECT * FROM $tbl ORDER BY id DESC"); for($i=0;$i<mysql_num_rows($result);$i++) { $ergebnis[$i]=mysql_fetch_array($result); } $gesamt = count($ergebnis); for($i=0;$i<$gesamt;$i++) { echo "ID:\t\t".$ergebnis[$i][id]."\n"; echo "Name:\t\t".$ergebnis[$i][name]."\n"; echo "Vorname:\t".$ergebnis[$i][vname]."\n"; echo "Delday:\t".$ergebnis[$i][delday]."\n"; echo "Datum:\t".$ergebnis[$i][datum]."\n"; $id = $ergebnis[$i][id]; if($ergebnis[$i][delday]>=1) { echo "# # #Noch gueltig...# # #\n\n"; $newdelday = $ergebnis[$i][delday]--; $newdelday = $newdelday-1; mysql_query("UPDATE $tbl SET delday = $newdelday WHERE id = $id;"); echo mysql_error(); } else { echo "# # #Ungueltig...# # #\n\n"; mysql_query("DELETE FROM $tbl WHERE id = $id;"); echo mysql_error(); } } } ?> lalala Schönes Wochenende an alle!!! Ciaoi Zitieren
Jaraz Geschrieben 29. August 2003 Geschrieben 29. August 2003 Warum so kompliziert? Hast du meinen Beitrag im Datenbankthread nicht gelesen? Datei skript.sql ----------- UPDATE tbl_suche SET delday = (delday-1); UPDATE tbl_biete SET delday = (delday-1); DELETE FROM tbl_suche WHERE delday<1; DELETE FROM tbl_biete WHERE delday<1; ----------- Mit folgenden Befehl laden: mysql --user=user_name --password=your_password database < skript.sql Gruß Jaraz PS: Wobei diese und deine Lösung sehr fehleranfällig ist, da wenn ein cronjob nicht ausgeführt wird, oder einer doppelt ausgeführt wird, deine Rechnung nicht mehr stimmt. Ich würde eher mit einem Datumswert arbeiten. Zitieren
debitux Geschrieben 10. September 2003 Autor Geschrieben 10. September 2003 Upps hatte deinen Beitrag übersehen... Hast recht das ist einfacher ;-)... Hätte ich das früher gelesen.... Naja :-) Meine Schuld... Gruß debitux Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.