dedlfix: Open Source Projekt: DB-Tabelle als CSV-Datei mailen

Beitrag lesen

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