ubuntuusers.de

Fehlermeldung in PHP Script unterdrücken

Status: Ungelöst | Ubuntu-Version: Server 20.04 (Focal Fossa)
Antworten |

gnude

Avatar von gnude

Anmeldungsdatum:
11. Juli 2014

Beiträge: 843

Hallo ich habe ein PHP Script das eine Datenbankabfrage durchführt. Das Ergebniss der Abfrage möchte ich gern als CSV Datei abspeichern. Da es sich in diesem Fall nicht um mysql sondern um ms-sql handelt kann ich die Abfrage nicht direkt in eine CSV exportieren lassen. (bei mysql hätte ja INTO OUTFILE Funktioniert) Meine Idee war nun das ich eine ganz einfache Webseite ausgeben lasse die CSV konform ist. Das klappt soweit ganz gut, auch mit der Möglichkeit diese auf Knopfdruck zu speichern. Aber es rutschen immer noch ein paar PHP Fehlermeldungen mit rein. Die Variablen übergebe ich per Formular und hole sie als "get" auf der Seite ab. Beispiel:

$sqlwert1 = $_GET['1'];

Nun bekomme ich in der HTML Ausgabe aber folgende Hinweise mit ausgegeben:

<br /><b>Notice</b>:  Undefined offset: 1 in <b>C:\xampp\htdocs\seite\abfrage.php</b> on line <b>5</b><br />

Diese Ausgabe stört natürlich sehr in der CSV Datei. Wenn ich die Fehlerausgabe auf 0 setzte ... error_reporting(0); funktioniert das Script gar nicht mehr.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

die Angaben sind ein bisschen dünn bzw. allgemein gehalten... du musst halt a) die Eingaben validieren und b) die Rückgabe des SQL-Servers validieren, ob Fehler drin sind. Und diese dann entweder abfangen und erst gar keine Daten ausgeben, sondern den Fehler an den Nutzer zurück geben. Den Fehler einfach zu unterdrücken ist IMHO der falsche Weg.

Warum die den Umweg über eine Webseite gehst verstehe ich auch noch nicht. Ich kann kein PHP, aber ist es mit PHP nicht möglich, Daten direkt in eine Datei zuschreiben? Also wenn du die Abfrage der DB machst hast du eine Datenstruktur im Speicher, die überführst du in ein CSV-konformes Format und speicherst die Datei dann. Oder sendest sie an den Client (=den Browser), damit der Nutzer sie speichern kann.

Gruß, noisefloor

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Mit dem Operator @ vor einer Funktion kann man verhindern, das die Fehlermeldung im der HTML Ausgabe erscheint und stattdessen nach $php_errormsg umgeleitet wird.

Da es sich in diesem Fall nicht um mysql sondern um ms-sql handelt kann ich die Abfrage nicht direkt in eine CSV exportieren lassen.

Das verstehe ich jetzt auch nicht. Ich weiß zwar nicht, was da zurückkommt, aber CSV selber erzeugen, kann doch nicht so schwer sein.

Humbi

Anmeldungsdatum:
14. Juni 2014

Beiträge: 74

Ich weiß nicht welche Daten du schon genau in einer Variablen hast und ich kenn mich mit csv nicht aus. Aber wenn du nur etwas in eine Datei schreiben willst geht das auch mit fopen und fwrite. Ich hätte nur die Dateiendung geändert und das mal probiert. Ansonsten vlt. noch ein paar Infos liefern.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$filename = 'test.txt';
$somecontent = "Füge dies der Datei hinzu\n";
// Sichergehen, dass die Datei existiert und beschreibbar ist.
if (is_writable($filename)) {
    // Wir öffnen $filename im Anfüge-Modus.
    // Der Dateizeiger befindet sich am Ende der Datei, und daher
    // wird später $somecontent mit fwrite() dorthin geschrieben.
    if (!$fp = fopen($filename, "a")) {
         print "Kann die Datei $filename nicht öffnen";
         exit;
    }
    // Schreibe $somecontent in die geöffnete Datei.
    if (fwrite($fp, $somecontent) === FALSE) {
        print "Kann nicht in die Datei $filename schreiben";
        exit;
    }
    print "Fertig, in die Datei $filename wurde $somecontent geschrieben";
    fclose($fp);
} else {
    print "Die Datei $filename ist nicht schreibbar";
}
?>

von:https://www.php.net/manual/de/function.fwrite.php

Gruß Humbi

Antworten |