Suche PHP Script um SQL Datenbank Einträge zu löschen

Begonnen von Ma_Bo, 28 Juli 2017, 18:08:08

Vorheriges Thema - Nächstes Thema

Ma_Bo

Hallo Leute,
ich suche eine Möglichkeit mit Hilfe von FHEM eine PHP Seite aufzurufen um dann in einer MYSQL Datenbank Einträge zu löschen.

Die PHP Seite per FHEM aufrufen klappt, nur fehlen mir die richtigen Einträge.

Habe schon viel probiert, leider ohne Erfolg, hier einer meiner Versuche:

<?php
    
//Verbindung zur Datenbank herstellen

    
mysql_connect("localhost""Benutzer12345","Passwort12345") or die ("Verbindung nicht moeglich");
    
mysql_select_db("traccar") or die ("Datenbank existiert nicht");
 
//Eintraege die aelter als 62 Tage sind loeschen
$loesch "DELETE FROM positions WHERE DATEDIFF( NOW( ) , serverTime ) >=62";
$ergebnis mysql_query($loesch);

exit;



?>



Vielleicht hat ja einer eine Idee oder kennt sich aus und kann mir helfen.

Es sollen alle Einträge die älter als z.B. 62 Tage sind gelöscht werden, die Zeit zum vergleichen steht in "serverTime"

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

DeeSPe

Geht das nicht per cron Job?
Wozu ist FHEM nötig?
Und wozu PHP?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Ma_Bo

Würde auch per cron gehen...
FHEM ist nicht zwingend nötig, aber wenn es geht, würde ich es gerne umsetzen...

Muss auch nicht unbedingt PHP sein, bin für Anregungen und Wege offen...

Grüße Marcel


Tapatalk mit Handy geschrieben, daher kurz gehalten.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

DeeSPe

Zitat von: Ma_Bo am 28 Juli 2017, 21:22:01
FHEM ist nicht zwingend nötig, aber wenn es geht, würde ich es gerne umsetzen...

Dann würde sich eine Funktion in der 99_myUtils.pm anbieten die dann per at regelmäßig gestartet werden kann.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Ma_Bo

Zitat von: DeeSPe am 28 Juli 2017, 21:29:51
Dann würde sich eine Funktion in der 99_myUtils.pm anbieten die dann per at regelmäßig gestartet werden kann.

Gruß
Dan

Hättest du da ggfs. ein Beispiel?


Tapatalk mit Handy geschrieben, daher kurz gehalten.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

DeeSPe

Zitat von: Ma_Bo am 28 Juli 2017, 21:31:12
Hättest du da ggfs. ein Beispiel?

Nö, so aus dem Ärmel nicht.
Aber man könnte sich z.B. das DbLog Modul ansehen wie dort ein Datenbank Connect gemacht wird.
Da erfährt man sicher auch wie man ein SQL Statement ausführt.

So schwierig kann das nicht sein würde ich sagen.
Aber wie gesagt, wenn es nicht dringend nötig ist in FHEM umzusetzen, ist ein Shell Skript und ein cron Job sicher einfacher und schneller.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

#6
Wenn Deine Webseite funktioniert, dann spricht eigentlich nichts dagegen diese mit GetFileFromURL() "abzuholen".

Gruß
Dan

EDIT: Sofern Du Herr über das PHP Skript bist kannst Du damit auch eigene Rückgabewerte definieren und diese z.B. in ein dummy Device schreiben.
my $ret = GetFileFromURL("http://meine.schoene.website");
fhem "setreading dummy state $ret";
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Ma_Bo

FHEM läuft auf dem selben System.
Ich werd mich kommende Woche mal genauer darum kümmern.

In Perl wäre auch super, aber erstmal Danke für eure Hinweise.

Gruß Marcel


Tapatalk mit Handy geschrieben, daher kurz gehalten.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Ma_Bo

Zitat von: haus-automatisierung.com am 29 Juli 2017, 10:35:08
Hi,

also erstmal sieht das gar nicht so falsch aus. Allerdings würde ich


  • mysqli_connect statt mysql_connect verwenden - sonst klappt dein Script irgendwann nicht mehr
  • Einmal ein SELECT ausführen, um zu schauen ob überhaupt alles richtig selektiert wird "SELECT * FROM positions WHERE DATEDIFF(NOW(), serverTime) >= 62" - kommen da Ergebnisse?
  • Liegt das Script auf einem ganz anderen System als FHEM? Ansonsten würde ich mir den Weg über einen Webserver sparen und direkt per cli das php-Script ausführen.
  • Oder sogar komplett in Perl die DB-Verbindung aufbauen und die Einträge löschen (wie schon gesagt wurde).


<?php

$mysqli 
= new mysqli('localhost''Benutzer12345''Passwort12345''traccar');

if (
$mysqli->connect_error) {
    die(
'Connect Error (' $mysqli->connect_errno ') ' $mysqli->connect_error);
}

if (
$mysqli->query("DELETE FROM positions WHERE DATEDIFF(NOW(), serverTime) >= 62") === true) {
    echo 
'ok';
} else {
    echo 
'failed';
}

$mysqli->close();



Hi,
also bei dem Befehl ( "SELECT * FROM positions WHERE DATEDIFF(NOW(), serverTime) >= 62" ) kommen Ergebnisse.

Leider bekomme ich beim aufruf der PHP, die failed Meldung.

NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Christoph Morrison

Zitat von: Ma_Bo am 01 August 2017, 00:01:59
Leider bekomme ich beim aufruf der PHP, die failed Meldung.

Was sagt mysqli::$error_list wenn failed ausgegeben wird?

Wernieman

Anstatt perl/php geht es sogar mit der Kommandozeile und "mysql" .... viele Wege führen nach Rom.

Ich würde Dir empfehlen, es "einfach zu halten", also direkt ohne Webzugriff (eben bei php per php-cli). Dann kannst Du auch besser debuggen.

Dafür bräuchte man, wie erwähnt, die mysqli::$error_list
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Ma_Bo

Klingt für euch alle plausibel, aber wie baue ich das bei mir ein?
Wie genau bekomme ich die mysqli::$error_list?

Dankende Grüße
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Wernieman

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Ma_Bo

Sorry, versteh ich auf die schnelle nicht.

Werde mich die Tage dann wohl erst einmal damit beschäftigen müssen.

Grüße und Danke für eure Hinweise
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Wernieman

Aus dem Beitrag:
print_r($mysqli->error_list);

Allerdings copy&paste ungetestet
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html