PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

23-04-2018, 10:37
|
wernerx
Registrierter Benutzer
|
|
Registriert seit: Apr 2018
Beiträge: 6
|
|
Werte aus sql-Datenbank in csv schreiben
Hi,
erster Post und gleich ne doofe frage, so haben wir es gerne 
Ja Sorry. Bin der absolute php-Anfänger und versuche hier die ganze Zeit Datenbankinhalte in eine csv zu schreiben.
Aber egal was ich ausprobiere, er sagt mir immer, dass ich was falsch mache.
Hier mal der Code. Das funktioniert auch soweit, dass meine Daten richtig formatiert am Bildschirm angezeigt werden.
Code:
$sql = "SELECT .....
$db = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
$db->set_charset('utf8');
$erg = $db->query($sql)
or die( $db->error);
//Ausgabe Ergebnis
if ($erg->num_rows) {
echo "<p>Daten vorhanden: Anzahl ";
echo $erg->num_rows;
$fp=fopen("datei.csv", "w");
}
while ($zeile = $erg->fetch_object()) {
echo '<br>'. $zeile->username, ", ", $zeile->pf_strasse, ", ", $zeile->pf_ort, ", ", $zeile->user_id;
}
fclose($fp);
$erg->free();
$db->close();
Ich habe nun versucht über verschiedenste Varianten mit fputcsv oder fwrite versucht die Daten in eine Datei zu schreiben. Aber es kommen immer Fehlermeldungen, dass das Format nicht stimmt.
Es wäre echt nett, wenn mir hier jemand die richtige Codezeile zur Ausgabe basteln könnte.
Danke im voraus
gruß Werner
|

23-04-2018, 10:47
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
Ich sehe in dem Code weder ein fwrite, noch ein fputcsv.
|

23-04-2018, 10:49
|
wernerx
Registrierter Benutzer
|
|
Registriert seit: Apr 2018
Beiträge: 6
|
|
Den habe ich wieder gelöscht, da er ja eh falsch war
|

23-04-2018, 11:00
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
Zitat:
Zitat von wernerx
Den habe ich wieder gelöscht, da er ja eh falsch war 
|
Und man soll jetzt erraten, was du falsch gemacht hast?
|

23-04-2018, 11:24
|
wernerx
Registrierter Benutzer
|
|
Registriert seit: Apr 2018
Beiträge: 6
|
|
Das Problem hat sich teilweise erledigt.
Habe parallel natürlich weiter probiert und bin jetzt auf eine Lösung gestoßen, die teilweise funktioniert.
Meine While Schleife sieht jetzt so aus:
Code:
while ($zeile = $erg->fetch_object()) {
echo '<br>'. $zeile->username, ", ", $zeile->pf_strasse, ", ", $zeile->pf_ort, ", ", $zeile->user_id;
$daten = (array) $zeile;
fputcsv($fp, $daten);
ich hatte bei den vorherigen Tests das so stehen:
Code:
$daten = $zeile;
fputcsv($fp, $daten);
Aber jetzt habe ich ein anderes "Problem"
Das Ergebnis sieht in der Datei jetzt so aus:
Code:
975,riza,"Irgendwo 10a",57057
1093,taing,"Hinsenweg 3","12345 testhausen"
Immer wenn ein Leerzeichen dabei ist, werden meine Werte in Anführungszeichen gesetzt.
Bei der Ausgabe mit echo nicht. Das stört aber, kann man die irgendwie weg bekommen? Darf ich hier weiter Fragen, oder soll ich dazu ein neues Thema aufmachen?
Danke Gruß Werner
|

23-04-2018, 11:54
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
Zitat:
Zitat von wernerx
Immer wenn ein Leerzeichen dabei ist, werden meine Werte in Anführungszeichen gesetzt.
|
Ja, das ist bei CSV so.
Zitat:
Zitat von wernerx
Bei der Ausgabe mit echo nicht. Das stört aber, kann man die irgendwie weg bekommen?
|
Warum? Das ist ein korrektes CSV-Format. Ich dachte du wolltest eine CSV-Datei erstellen?
|

23-04-2018, 12:45
|
wernerx
Registrierter Benutzer
|
|
Registriert seit: Apr 2018
Beiträge: 6
|
|
Mein Fehler, Sorry.
Ich verarbeite die csv mit einem anderen Programm weiter und da waren in allen Beispieldateien keine Anführungszeichen. Aber ich habe es jetzt mal getestet, die Schnittstelle kommt auch mit Zeichenfolgen in Anführungszeichen zurecht.
Danke für deine Hilfe.
gruß Werner
PS. Wenn ich gerade dabei bin, vielleicht kannst du mir bei einem anderen Thema noch mal drüber schauen.
Parallel lese ich die Datei für Auswertungen mit Excel ein, dabei macht er Probleme mit den umlauten. Ich habe folgende Zeile in meinem php-Script:
Code:
header('Content-Type: text/html; charset=utf-8');
Damit sollte doch sicher gestellt sein, dass die Datei die er erzeugt utf-8 kodiert ist. Richtig?
Ich muss leider diesen Weg über Excel gehen, da ich die Datei noch sehr umfangreich über bubbelsort mit einer anderen Datei auswerten muss. Und das kriege ich in php aufgrund der Komplexität nie hin.
|

23-04-2018, 12:50
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
Zitat:
Zitat von wernerx
Parallel lese ich die Datei für Auswertungen mit Excel ein, dabei macht er Probleme mit den umlauten. Ich habe folgende Zeile in meinem php-Script:
Code:
header('Content-Type: text/html; charset=utf-8');
Damit sollte doch sicher gestellt sein, dass die Datei die er erzeugt utf-8 kodiert ist. Richtig?
|
1. Ich dachte du möchtest eine CSV-Datei und keine HTML-Datei erzeugen? Warum sagst du dann im Header, dass du HTML ausgibst?
2. Nur weil du im Header sagst, dass du UTF-8 ausgibst, wird nicht automagisch alles in dieser Kodierung ausgegeben. Darum musst du dich schon selber kümmern. Im Fall der Datenbank musst du die Datenbankverbindung auf UTF-8 setzen. Und wenn die Daten von Excel gelesen werden, beachte, dass Excel einen UTF-8 BOM erwartet. Den musst du auch noch am Anfang des Datenstroms ausgeben.
|

23-04-2018, 15:13
|
wernerx
Registrierter Benutzer
|
|
Registriert seit: Apr 2018
Beiträge: 6
|
|
Hi,
der Fehler mit dem Header ist halt meinem Copy und paste programmieren geschuldet. danke für den Hinweis.
vielleicht kannst du mir helfen, wie ich die csv-datei richtig erstelle?
Wenn ich meine derzeitige csv-Datei mit einem Editor öffne, wird mir als Codierung Unix UTF-8 angezeigt. Also UTF-8 ist schon mal richtig.
Aber die Umlaute werden trotzdem in Excel nicht richtig verarbeitet.
Wenn ich eine Textdatei auf meinem PC erstelle (Codierung Windows / Ansi) und kopiere die Daten per copy und paste aus der UNIX Datei, werden die Umlaute richtig verarbeitet.
Eine Hilfe wäre toll, Danke.
gruß Werner
|

23-04-2018, 15:51
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
PHP-Code:
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]);
$db->query(' CREATE TEMPORARY TABLE test ( id INT NOT NULL AUTO_INCREMENT, foo VARCHAR(255) NOT NULL, PRIMARY KEY (id) ) ');
$stmt = $db->prepare('INSERT INTO test (foo) VALUES (?)'); $stmt->execute(["B\xC3\xA4rlauch"]); $stmt->execute(["R\xC3\xB6mer"]); $stmt->execute(["Wei\xC3\x9Fer Tee"]);
$result = $db->query('SELECT id, foo FROM test');
/** * CSV-Ausgabe */
header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="export.csv"');
echo "\xEF\xBB\xBF"; // UTF-8 BOM
$fp = fopen('php://output', 'w'); while ($row = $result->fetch(PDO::FETCH_NUM)) { fputcsv($fp, $row, ';'); } fclose($fp);
|

23-04-2018, 21:14
|
ThomasTailer
Banned
|
|
Registriert seit: Apr 2018
Beiträge: 2
|
|
Also probier es aus
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Create database
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>
Geändert von Kropff (23-04-2018 um 22:40 Uhr)
|

24-04-2018, 07:28
|
wernerx
Registrierter Benutzer
|
|
Registriert seit: Apr 2018
Beiträge: 6
|
|
@Hernando: Weiß gerade nicht was du mir mit dem Zitat von h3ll sagen willst?
@ThomasTailor: Bei dir geht es mir ähnlich. Das Script erstellt eine Datenbank? Eine Datenbank habe ich schon, daher fehlt mir gerade die Idee was mir dein Script bei dem UTF-8 Problem helfen soll?
@h3ll: Danke, muss mal schauen ob ich vor meinem Urlaub noch dazu komme das zu testen, wenn nicht nach meinem Urlaub. Aber vorab schon mal Danke für deine Mühen.
Gruß Werner
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|