# PHP-Befehl zur Erstellung einer CSV-Datei



## LN5 (11. August 2006)

Hello everybody

im phpMyAdmin kann man ja bekanntlich Tabellen exportieren. Jetzt möchte ich aber auch anderen die Möglichkeit geben Tabellen als CSV-Datei (für Excel 2003) zu exportieren. 

Wie gesagt, in phpMyAdmin ist das kein Problem, aber wie kann ich das mit PHP realisieren?

Grüsse


----------



## Gumbo (11. August 2006)

Schau doch einfach mal ins PHP-Handbuch.


----------



## Dr Dau (11. August 2006)

Hallo!

Ein Beispiel aus meinem CSV basierten Adressverzeichnis:

```
<?php
if( ($_POST['Vorname']) OR ($_POST['Nachname']) OR ($_POST['Name']) OR ($_POST['E-Mail-Adresse']) OR ($_POST['Strasse']) OR ($_POST['Ort']) OR ($_POST['Postleitzahl']) OR ($_POST['Bundesland']) OR ($_POST['Telefon']) OR ($_POST['Mobiltelefon']) OR ($_POST['Webseite']) ) {
    $datei = fopen("kontakte.csv", "a");
    $eintrag = $_POST['Vorname'].";".$_POST['Nachname'].";".$_POST['Name'].";".$_POST['E-Mail-Adresse'].";".$_POST['Strasse'].";".$_POST['Ort'].";".$_POST['Postleitzahl'].";".$_POST['Bundesland'].";".$_POST['Telefon'].";".$_POST['Mobiltelefon'].";".$_POST['Webseite']."\r\n";
    fwrite($datei, $eintrag); 
    echo "&Auml;nderungen wurden gespeichert<br /><br /><a href=\"add.html\">zur&uuml;ck zum Formular</a>";
} else {
    echo "Es muss mindestens 1 Feld ausgefüllt sein!<br /><br /><a href=\"add.html\">zur&uuml;ck zum Formular</a>";
}
?>
```
Anstatt die $_POST aus einem Formular zu holen, holst Du die Daten halt aus der Datenbank..... das Prinzip zum schreiben der CSV ist dabei ja das gleiche.

Gruss Dr Dau


----------



## forsterm (11. August 2006)

Hallo,
falls du PHP 5 hast, könntest du auch [phpf]fputcsv[/phpf] verwenden.

mfg
forsterm


----------



## tom01 (11. August 2006)

Hallo
also dein Problem versteh ich nicht! 
Du willst eine CSV Datei erstellen! 
Hast dir schon mal die struktur einer CSV Datei angesehen?!
Ist nix anderes als Spalte 1 dann ein ";" dann Spalte 2 wieder ein ";" ....


----------



## LN5 (11. August 2006)

habe erwartet, dass diese Frage kommen wird.  Das Problem ist folgendes: 

Wie du richtigerweise bereits gesagt hast, ist eine csv-Datei nichts anderes als eine ; getrennte Reihe von Daten. Das Problem ist aber, dass es 2 verschiedene Arten von CSV Dateien gibt. Solche für Windows und solche für Excel 2003 und Macintosh. Der Unterschied ist u.a. der, dass ich bei zweiterem wirklich mehrere Spalten habe wobei aber bei "normalen" CSVs die Daten nur durch ; getrennt sind. Die Spalten brauche ich, damit ich z.B. filtern kann.

Du wirst sehen, dass man in phpMyAdmin genau aus diesem Grund die Option hat das ganze als normale Windows oder ebe Excell 2003/Macintosh Datei zu exportieren.

Gruss

Alain


----------



## Dennis Wronka (11. August 2006)

LN5 hat gesagt.:
			
		

> Du wirst sehen, dass man in phpMyAdmin genau aus diesem Grund die Option hat das ganze als normale Windows oder ebe Excell 2003/Macintosh Datei zu exportieren.


Ich weiss ja nicht welche Version von PHPMyAdmin Du nutzt, aber bei mir sieht diese Information etwas anders aus, aber zumindest ein wenig aehnlich. Jedoch sehe ich nichts von wegen Excel 2003 und/oder Mac.


			
				PHPMyAdmin 2.8.0.3 Export hat gesagt.:
			
		

> SQL
> LaTeX
> PDF
> Microsoft Excel 2000
> ...



Aber ich denk mal mit Deiner Ausfuehrung willst Du auf die unterschiedliche Realisierung der Zeilenumbrueche in verschiedenen Betriebssystemen ansprechen.


----------



## Dr Dau (11. August 2006)

Wirklich verstehen tue ich das Problem auch nicht.
Welches Zeichen als Trennzeichen verwendet wird oder wie der Zeilenumbruch erfolgt, kannst Du doch selbst bestimmen.  

Eine Abfrage, die auch flexibel einsetzbar ist (da unabhängig von der Anzahl der Spalten), könnte auch so aussehen:

```
<?php
mysql_connect("localhost","*****","*****");
mysql_select_db("datenbank");
 
$result = mysql_query("SELECT * FROM `tabelle`");
 
$i = 0;
while ($i < mysql_num_fields($result)) {
   $feld = mysql_fetch_field($result, $i);
   $feld_array[] = $feld->name;
   $i++;
}
echo '"'.implode('";"', $feld_array).'"<br />';
 
while($row = mysql_fetch_row($result) or die(mysql_error())) {
    echo '"'.implode('";"', $row).'"<br />';
}
?>
```
So hast Du Deine CSV inkl. der Feldnamen in der ersten Zeile.


----------



## LN5 (11. August 2006)

hmm.. wenn ich mit meiner Excel Version (2003) eine Datei öffne, die ich z.B. mit dem Editor erstellt habe und als .csv umbenannt habe öffne, dann habe ich eine Zeile in welcher die Datensätze nacheinander durch ; getrennt sind. Also pro Zeile in der CSV Datei gibt es eine Zeile in Excel aber auch nur eine Spalte. 
*
normale CSV Datei in Excel geöffnet*
--------------------------------------------------------------------------------------
A; B; C; D; E; F; G; H;
--------------------------------------------------------------------------------------
*
CSV für Excel 2003*
--------------------------------------------------------------------------------------
A | B | C | D | E | F | G | H |                      -->  |  = Spalte
--------------------------------------------------------------------------------------

Jetzt klar?


----------



## Gumbo (11. August 2006)

Und wo genau ist jetzt das Problem?


----------



## Dr Dau (11. August 2006)

LN5 hat gesagt.:
			
		

> Jetzt klar?


Nicht wirklich..... abgesehen davon dass die ; nicht die Datensätze markieren, sondern die Spalten.
Jeder Datensatz steht in einer neuen Zeile, in jeder Zeile sind die Spalten durch ein ; getrennt.

phpMyAdmin --> CSV-Daten für MS Excel --> Excel 2003 / Macintosh (inkl. Feldnamen):


			
				phpMyAdmin hat gesagt.:
			
		

> "id";"username";"password";"user_id";"table";"user_status"
> "1";"test";"test";;"eintraege";"0"
> "2";"Gast";"Gast";;"eintraege";"0"
> "3";"TEST";"bla";;"eintraege";"0"


Mein Script:


			
				mein Script hat gesagt.:
			
		

> "id";"username";"password";"user_id";"table";"user_status"
> "1";"test";"test";"";"eintraege";"0"
> "2";"Gast";"Gast";"";"eintraege";"0"
> "3";"TEST";"bla";"";"eintraege";"0"


Dass bei meinem Script bei leeren Feldern nur "" erscheint, dürfte eigentlich kein Problem für Excel sein..... ansonsten ist das Ergebnis identisch.


----------



## LN5 (11. August 2006)

Dennis Wronka hat gesagt.:
			
		

> Ich weiss ja nicht welche Version von PHPMyAdmin Du nutzt, aber bei mir sieht diese Information etwas anders aus, aber zumindest ein wenig aehnlich. Jedoch sehe ich nichts von wegen Excel 2003 und/oder Mac.
> 
> 
> Aber ich denk mal mit Deiner Ausfuehrung willst Du auf die unterschiedliche Realisierung der Zeilenumbrueche in verschiedenen Betriebssystemen ansprechen.



Ich habe "hpMyAdmin - 2.8.0.4".. Wenn ich auf "CSV-Daten für MS Excel" klicke, erscheint rechts ein Optionsfeld, das "Excel-Ausgabe:" heisst. Hier kann ich wählen, ob ich eine Windows oder eben Excel 2003/Mac Ausgabe will. Auch wenn ihr noch so darauf besteht, dass kein Unterschied da ist, frage ich mich, wieso es dann verschiedene Ausgabemöglichkeiten gibt, wenn doch beides genau gleich sein soll. Got it?


----------



## Dennis Wronka (11. August 2006)

Wie gesagt, der Unterschied duerfte wohl bei den Zeilenumbruechen liegen. Also, schoen die Fuesse stillhalten.


----------



## Dr Dau (11. August 2006)

phpMyAdmin --> CSV-Daten für MS Excel --> Windows (inkl. Feldnamen):


			
				phpMyAdmin hat gesagt.:
			
		

> "id","username","password","user_id","table","user_status"
> "1","test","test",,"eintraege","0"
> "2","Gast","Gast",,"eintraege","0"
> "3","TEST","bla",,"eintraege","0"


Siehst Du nun den Unterschied?
Komma vs. Semikolon.
Aber wei schon gesagt, welches Trennzeichen Du benutzen willst, kannst Du Dir ja selber aussuchen.

Ob Du Dich nun für das Komma oder das Semikolon entscheidest, kann beides verkehrt sein.
Denn zumindest unter Windows lässt sich einstellen welches Zeichen Excel als Spaltentrennzeichen nutzen soll.
Stelle einfach beide Möglichkeiten zur Verfügung und gut ist.


----------

