Open Source Projekt: DB-Tabelle als CSV-Datei mailen
Kalle_B
- meinung
0 dedlfix
0 Julian von Mendel0 dedlfix
Hallöle,
ein Kunde soll selbst für seine Datensicherung verantwortlich sein.
Da es offenbar kein fertiges Script gibt, das einzelne Tabellen per Mail versendet https://forum.selfhtml.org/?t=129945&m=840211, mache ich eins und stelle es als Open Source zur Verfügung.
Es kann getestet werden, und ich bin gespannt auf eure Kommentare. Hier oder im Gästebuch:
http://osmer.de/table2csv.php
Lieben Gruß, Kalle
echo $begrüßung;
Da es offenbar kein fertiges Script gibt, das einzelne Tabellen per Mail versendet, mache ich eins und stelle es als Open Source zur Verfügung.
Die Source kann ich leider nicht finden und deshalb auch nicht beurteilen.
Es kann getestet werden, und ich bin gespannt auf eure Kommentare. Hier oder im Gästebuch:
http://osmer.de/table2csv.php
Aber hast du mal ein ' im Gästebuchskript eingegeben?
echo "$verabschiedung $name";
Die Source kann ich leider nicht finden und deshalb auch nicht beurteilen.
Habe ich als Link in die Doku eingefügt.
Aber hast du mal ein ' im Gästebuchskript eingegeben?
Was passiert dann?
Kalle
echo $begrüßung;
Die Source kann ich leider nicht finden und deshalb auch nicht beurteilen.
Habe ich als Link in die Doku eingefügt.
Dann kann ich mir die Sourcen ja dann noch anschauen. Zunächst noch zwei Anmerkungen zur Webseite:
Du verwendest das Warenzeichen von MySQL. Vermutlich hast du dafür keine schriftliche Genehmigung. Die wäre auch gar nicht nötig, wenn du eins der freigegebenen Logos verwendetest. Siehe MySQL AB Trademark Policy
Es ist ein Irrtum, zu glauben, man könne durch einen Haftungsausschluss die Folgen seines Tuns abwenden. Es ist auch ein Irrtum, zu glauben, man müsse für alle Eventualitäten einen Haftungsausschluss formulieren. (Hast du einen an deiner Wohnungstür hängen, wenn du Gäste erwartest?) Solange du nicht mit Vorsatz handelst oder einen Vertrag nicht einhältst, müsste nach meiner Laienmeinung §675 BGB 2. Absatz greifen.
echo "$verabschiedung $name";
Du verwendest das Warenzeichen von MySQL. Vermutlich hast du dafür keine schriftliche Genehmigung. Die wäre auch gar nicht nötig, wenn du eins der freigegebenen Logos verwendetest. Siehe MySQL AB Trademark Policy
Danke für den Hinweis, habe ich entsprechend umgebaut.
Es ist ein Irrtum, zu glauben, man könne durch einen Haftungsausschluss die Folgen seines Tuns abwenden.
Eigentlich warne ich andere davor, etwas Falsches zu tun mit einem von mir bereitgestellten Werkzeug.
Es ist auch ein Irrtum, zu glauben, man müsse für alle Eventualitäten einen Haftungsausschluss formulieren.
Oha, da stichst du bei mir aber in ein Wespennest ...
Diesen Eindruck macht die Rechtsprechung in diesem unseren Staate. Wieso distanzieren sich viele von verlinkten Seiten? s. Landgericht Hamburg ...
Und manchmal bekommt man beim Lesen von Artikeln den Eindruck, dass Abmahner darauf lauern, einem fröhlichen, unbeschwerten Landmann das Geld aus der Tasche zu ziehen.
Da muss man schon so tun, als ob man drei beratende Rechtsanwälte im Rücken hätte. So wie auf den Zigarettenpackungen, den Beipackzetteln, den Allgemeinen Geschäftsbedingungen, Miet- und Arbeitsverträgen.
Keiner soll glauben, das Leben in Deutschland wäre lustig. Deutsche jammern zu viel? Staatlich vorgeschrieben und juristisch einklagbar.
Da ist selbst die Erwähnung von "so ähnlich wie (Markenartikel)" im Text abmahnfähig, weil jemand, der (Markenartikel) sucht, per Suchmaschine auf meine Seite kommen könnte.
Meinungsfreiheit? Verfassungsgemässes Verbot der Zensur?
Da mahnt die M... (Bundeskanzlerin, Name vielleicht schon geschützt, wer weiss) in China die Menschenrechte an. Mal sehen, wenn die Chinesen hierher kommen, was die so anmahnen.
So, nun aber gut. Ich gehe mal eben nach draussen, mich wieder abkühlen.
Kalle
echo $begrüßung;
Es ist ein Irrtum, zu glauben, man könne durch einen Haftungsausschluss die Folgen seines Tuns abwenden.
Eigentlich warne ich andere davor, etwas Falsches zu tun mit einem von mir bereitgestellten Werkzeug.
Das kannst du gern tun. Empfehlungen für eine Datensicherung sind nicht verkehrt. Du kannst dich nur nicht vor der Verantwortung drücken. Und das ist ja auch nicht nötig, wenn du nicht vorsätzlich Mist machst.
Es ist auch ein Irrtum, zu glauben, man müsse für alle Eventualitäten einen Haftungsausschluss formulieren.
Diesen Eindruck macht die Rechtsprechung in diesem unseren Staate.
Das wage ich stark anzuzweifeln. Es ist wohl eher die Biertischmeinung, die diesen Eindruck hervorruft.
Wieso distanzieren sich viele von verlinkten Seiten? s. Landgericht Hamburg ...
Weil sie sicherlich weder das Urteil gelesen haben, noch sich dafür interessiert haben, worum es in dem Fall ging. Siehe z.B. hier: http://www.daniel-rehbein.de/urteil-landgericht-hamburg.html
Und manchmal bekommt man beim Lesen von Artikeln den Eindruck, dass Abmahner darauf lauern, einem fröhlichen, unbeschwerten Landmann das Geld aus der Tasche zu ziehen.
Anscheinend ist das so, aber davor schützt dich dein Haftungsausschluss auch nicht.
echo "$verabschiedung $name";
Aber hast du mal ein ' im Gästebuchskript eingegeben?
Oha, danke für den Tipp. Und ich hatte den Fehler schon mal:
// 21.1.05 Eintraege mit ' ergaben Fehler beim INSERT
$inhalt = str_replace( "'", "′", $inhalt );
$inhalt = str_replace( '"', '"', $inhalt );
Aber die anderen Felder abzuprüfen, habe ich vergessen.
Kalle
hi,
// 21.1.05 Eintraege mit ' ergaben Fehler beim INSERT
$inhalt = str_replace( "'", "′", $inhalt );
$inhalt = str_replace( '"', '"', $inhalt );
Unter der Annahme, dass du die Daten in eine MySQL-Db eintragen willst:
Warum nimmst du da so unsinnige Ersetzungen vor, was hat HTML-Code in deiner DB zu suchen?
Zitat Cheatah:
"Das gilt übrigens _immer_, wenn Du eine Information in einen bestimmten Kontext bringst. Sie muss(!) immer(!) kontextspezifisch kodiert werden."
mysql_real_escape_string() wäre die richtige Funktion, um das Problem zu handeln.
_Alles andere_ ist Quark.
gruß,
wahsaga
Heyho,
ein Kunde soll selbst für seine Datensicherung verantwortlich sein.
Da es offenbar kein fertiges Script gibt, das einzelne Tabellen per Mail versendet https://forum.selfhtml.org/?t=129945&m=840211, mache ich eins und stelle es als Open Source zur Verfügung.
Es kann getestet werden, und ich bin gespannt auf eure Kommentare. Hier oder im Gästebuch:
http://osmer.de/table2csv.php
finde ich gut. Ich hab's noch nicht getestet, werde aber in ca. 5 Monaten ebenfalls eine Datenbank als Excel-Datei oder in einem kompatiblen Format exportieren müssen. An deinem Code stört mich, abgesehen von den Bugs, erstens, dass du nicht PDO verwendest, und zweitens, das relativ unflexibel dadurch vorgegangen wird, dass der Code zum mailen direkt in die Klasse integriert ist. Ich würde empfehlen, dass du die Klasse sauber trennst, in eine Funktion, der die Daten aus der DB in ein Array übernimmt, und dabei wahlweise nur einen PDO-Handler übergeben bekommt, eine Funktion die die geladenen Daten in eine csv-Datei exportiert, eine Funktion, die die Daten als HTML darstellt. Das Mailen würde ich aus der Klasse komplett entfernen - es gibt fertige Klassen, die Mails mit Dateianhang verschicken oder du nimmst dafür eine von der Klasse unabhängige Funktion. Ich werde deine Seite bookmarken und in ein paar Monaten sehen, wie's ihr geht.
Schöne Grüße
Julian
Hallo Julian,
[...] An deinem Code stört mich, abgesehen von den Bugs, erstens, dass du nicht PDO verwendest, [...]
Du kennst Kalle noch nicht :-)
Freundliche Grüße
Vinzenz
Hey Vinzenz,
[...] An deinem Code stört mich, abgesehen von den Bugs, erstens, dass du nicht PDO verwendest, [...]
Du kennst Kalle noch nicht :-)
wow. Das macht den Code so aufjedenfall für mich unverwendbar - in meinem CMS gibts nur E_STRICT-kompatible, saubere Objektorientierung mit PDO ;)
Schöne Grüße
Julian
echo $begrüßung;
Es kann getestet werden, und ich bin gespannt auf eure Kommentare.
Dann kommen wir jetzt mal zum technischen Teil:
define("XNL","\r\n"); // CONSTANT Newline CR
$mime_boundary = "--==================_846811060==_" ;
$mimetype = "application/octet-stream" ;
$Answer_Reply = "info@osmer.de";
Du definiertst eine Konstante, aber drei andere konstante Werte definierst du als Variable, wofür du dann später
global $mimetype, $mime_boundary, $Answer_Reply;
benötigst. Da sich der Wert der drei Variablen im Scriptverlauf nicht ändert, empfehle ich die Verwendung von Konstanten, was dann auch das global überflüssig macht, da Konstanten superglobal sind. Konstanten werden zwar im Gegensatz zu Variablen nicht in ""-Strings erkannt, aber diese Technik verwendest du ja nicht.
if (is_readable($FileName)) {
$fp = fopen($FileName, "r");
fopen() liefert im Fehlerfall false statt der Ressourcenkennung, doch diesen Fall wertest du nicht aus. Die nachfolgenden Dateifunktionen wollen aber kein false als Parameter. Die is_readable()-Prüfung ist nicht ausreichend. Auch Verzeichnisse sind lesbar.
$backup = $HTTP_GET_VARS['backup'];
...
Die $HTTP_*_VARS sind schon seit langem veraltet. Stattdessen gibt es jetzt die $_*-Ausführung. Prüfe vor dem Zugriff, ob/dass die Werte vorhanden sind, die du auszulesen gedenkst. (Setz das error_reporting auf E_ALL, wenn du PHP-Skripte entwickelst. Das gibt dir Hinweise bei bedenklichen Leseoperationen.)
$conn_id = @mysql_connect( $host, $id, $pw );
Auch die MySQL-Funktionen geben false zurück, wenn ihnen etwas nicht gepasst hat. Auch hier mögen die nachfolgenden mysql_*-Funktionen dieses fals nicht als Parameterwert.
if ( @mysql_select_db( $database, $conn_id ))
...
} else {
echo "<p><b>".mysql_errno() . ": " . mysql_error()."</b></p>";
Den Anwender deines Scripts wird sicherlich auch schon wissen wollen, was beim Connect nicht funktioniert hat, nicht nur wenn das Selektieren der Datenbank fehlschlug.
$sql_vers = mysql_query( "SELECT VERSION()" );
Die Versions des MySQL-Server lässt sich übrigens auch mit mysql_get_server_info() ermitteln.
$out = fopen( $dateiname, 'w' );
if ( $out )
Ahh... sieh an, du kannst es ja :-)
$res = mysql_query( $q, $conn_id );
$row = mysql_fetch_array( $res, MYSQL_NUM );
Hmm... wohl doch nicht richtig :-(
$header =
"...
X-Sender-IP: ".$REMOTE_ADDR."
...";
Wo kommt denn $REMOTE_ADDR her? Verlässt du dich auf ein eingeschaltetes register_gobals sowie auf einen passenden Wert in variables_order? Greife lieber auf den entsprechenden Eintrag in $_SERVER zu, prüfe aber vorher, ob er auch vorhanden ist.
Soweit die offensichtlichen Mängel. Ob das Skript so funktioniert, wie du möchtest hast du ja schon selbst getestet. Ob es so funktioniert, wie die Anwender das möchten, werden diese dir sagen. :-)
echo "$verabschiedung $name";
Hallo dedlfix.
Wo kommt denn $REMOTE_ADDR her? […] Greife lieber auf den entsprechenden Eintrag in $_SERVER zu, prüfe aber vorher, ob er auch vorhanden ist.
Hm, warum sollte $_SERVER['REMOTE_ADDR'] nicht gesetzt und mit einem Wert befüllt sein? Jeder Client verfügt doch zwangsläufig über eine IP.
Einen schönen Mittwoch noch.
Gruß, Ashura
echo $begrüßung;
Hm, warum sollte $_SERVER['REMOTE_ADDR'] nicht gesetzt und mit einem Wert befüllt sein? Jeder Client verfügt doch zwangsläufig über eine IP.
Mag sein, aber ob der Webserver so gnädig ist, sie einem in diesem Feld zu übergeben, kann man nicht wissen. Die Erfahrung lehrt mich, auch bei $_SERVER[*] nichts für selbstverständlich zu halten.
You may or may not find any of the following elements in $_SERVER. Gefolgt wird dieser Satz von einer unvollständigen Aufzählung von Feldern, die in $_SERVER je nach Serversoftware, Art der PHP-Einbindung, Art des Aufrufs vorhanden sein können oder auch nicht. Auch sollte man bei alle Zielplattformen prüfen, ob nicht bedeutende Unterschiede in den Werten gleicher Felder zu finden sind.
echo "$verabschiedung $name";
[*] ebenso wie bei allen anderen Variablen, deren Inhalt man nicht selbst gesetzt hat.
Hallo dedlfix.
Mag sein, aber ob der Webserver so gnädig ist, sie einem in diesem Feld zu übergeben, kann man nicht wissen. Die Erfahrung lehrt mich, auch bei $_SERVER[*] nichts für selbstverständlich zu halten.
Hm, ich habe dahingehend zwar bisher noch nie Probleme gehabt, aber ich werde es im Hinterkopf behalten.
Einen schönen Donnerstag noch.
Gruß, Ashura