php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 23-04-2018, 10:37
wernerx
 Registrierter Benutzer
Links : Onlinestatus : wernerx ist offline
Registriert seit: Apr 2018
Beiträge: 6
wernerx befindet sich auf einem aufstrebenden Ast
Unhappy 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
Mit Zitat antworten
  #2 (permalink)  
Alt 23-04-2018, 10:47
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.564
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ich sehe in dem Code weder ein fwrite, noch ein fputcsv.
Mit Zitat antworten
  #3 (permalink)  
Alt 23-04-2018, 10:49
wernerx
 Registrierter Benutzer
Links : Onlinestatus : wernerx ist offline
Registriert seit: Apr 2018
Beiträge: 6
wernerx befindet sich auf einem aufstrebenden Ast
Standard

Den habe ich wieder gelöscht, da er ja eh falsch war
Mit Zitat antworten
  #4 (permalink)  
Alt 23-04-2018, 11:00
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.564
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von wernerx Beitrag anzeigen
Den habe ich wieder gelöscht, da er ja eh falsch war
Und man soll jetzt erraten, was du falsch gemacht hast?
Mit Zitat antworten
  #5 (permalink)  
Alt 23-04-2018, 11:24
wernerx
 Registrierter Benutzer
Links : Onlinestatus : wernerx ist offline
Registriert seit: Apr 2018
Beiträge: 6
wernerx befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #6 (permalink)  
Alt 23-04-2018, 11:54
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.564
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von wernerx Beitrag anzeigen
Immer wenn ein Leerzeichen dabei ist, werden meine Werte in Anführungszeichen gesetzt.
Ja, das ist bei CSV so.

Zitat:
Zitat von wernerx Beitrag anzeigen
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?
Mit Zitat antworten
  #7 (permalink)  
Alt 23-04-2018, 12:45
wernerx
 Registrierter Benutzer
Links : Onlinestatus : wernerx ist offline
Registriert seit: Apr 2018
Beiträge: 6
wernerx befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #8 (permalink)  
Alt 23-04-2018, 12:50
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.564
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von wernerx Beitrag anzeigen
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.
Mit Zitat antworten
  #9 (permalink)  
Alt 23-04-2018, 15:13
wernerx
 Registrierter Benutzer
Links : Onlinestatus : wernerx ist offline
Registriert seit: Apr 2018
Beiträge: 6
wernerx befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #10 (permalink)  
Alt 23-04-2018, 15:51
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.564
h3ll befindet sich auf einem aufstrebenden Ast
Standard

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); 
Mit Zitat antworten
  #11 (permalink)  
Alt 23-04-2018, 21:14
ThomasTailer
 Banned
Links : Onlinestatus : ThomasTailer ist offline
Registriert seit: Apr 2018
Beiträge: 2
ThomasTailer befindet sich auf einem aufstrebenden Ast
Standard 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)
Mit Zitat antworten
  #12 (permalink)  
Alt 24-04-2018, 07:28
wernerx
 Registrierter Benutzer
Links : Onlinestatus : wernerx ist offline
Registriert seit: Apr 2018
Beiträge: 6
wernerx befindet sich auf einem aufstrebenden Ast
Standard

@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
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Lagerbestand aus .csv in Datenbank Tabelle schreiben ehrgeizz Apps und PHP Script Gesuche 5 29-04-2011 16:22
SQL Abfrage in csv schreiben eawebsolutions SQL / Datenbanken 1 01-02-2011 05:14
[SQL allgemein] 2 Werte in Datenbank Level7 SQL / Datenbanken 7 18-08-2008 11:58
werte von checkboxen in datenbank schreiben Krusty SQL / Datenbanken 1 03-03-2002 18:53
Werte aus Variable in ein Array schreiben andik2000 PHP Developer Forum 5 16-01-2002 09:01

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

html5pattern ansehen html5pattern

Pflichtfelder und Eingabevorgaben für Formulare validieren

06.07.2018 Berni | Kategorie: HTML5/ HowTo
Adventure PHP Framework

Das Adventure PHP Framework versteht sich als Hilfsmittel zur Implementierung von objektorientierten, generischen und wiederverwendbaren PHP-Web-Applikationen.

05.07.2018 phpler | Kategorie: PHP/ Framework
Phpstorm ansehen Phpstorm

Umfangreiche Entwicklungsumgebung für PHP-Programmierer inkl JavaScript und HTML Support. Jetzt Version 8.0!

03.07.2018 Berni | Kategorie: PHP ENTWICKLUNGSUMGEBUNG
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:46 Uhr.