PHP-Befehl zur Erstellung einer CSV-Datei

LN5

Mitglied
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
 

Dr Dau

ich wisch hier durch
Hallo!

Ein Beispiel aus meinem CSV basierten Adressverzeichnis:
PHP:
<?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
 

tom01

Mitglied
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

Mitglied
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

Soulcollector
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
Microsoft Word 2000
CSV for MS Excel
CSV

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

Dr Dau

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

Eine Abfrage, die auch flexibel einsetzbar ist (da unabhängig von der Anzahl der Spalten), könnte auch so aussehen:
PHP:
<?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

Mitglied
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?