CSV Datei ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CSV Datei ausgeben

    Hallo zusammen!

    ich habe eine Frage zum Thema CSV aus Datenbank exportieren.
    Die Tabelle "zweierteam" ist mit folgenden Fields aufgebaut. Momentan erhalte ich mit dem unten
    aufgeführten PHP-Script folgendes Ausgabefomat in der csv.

    Quellcode

    1. id,"bez","date","snumber","zweck","anrede","strasse","nr","plz","ort","email","geb","teamname","mann_1","teilnehmer1","mann_2","teilnehmer2","mann_3","teilnehmer3","mann_4","teilnehmer4","mann_5","teilnehmer5","mann_6","teilnehmer6",
    2. 201,"Team Pest","Christian Orthofer","201.1","Slawomir Chrzesciewski","201.2","","","","","","","","","","","","","","","","","","","",
    3. 202,"Rhönexpress","Andreas Remmert","202.1","Hans-Joachim Link","202.2","","","","","","","","","","","","","","","","","","","",


    Ich möchte aber das die Augabe folgendermassen ausschaut:

    Z.B. für 201
    snumber;teamname;mann_1;teilnehmer1
    201;Team Pest;Christian Orthofer;201.1;
    201;Team Pest;Slawomir Chrzesciewski;201.2;
    202;Rhönexpress;Andreas Remmert;202.1;
    202;Rhönexpress;Hans-Joachim Link;202.2;


    Wie muß ich das PHP Script umbauen?

    PHP-Quellcode

    1. <?php
    2. $verbindung = mysql_connect ("rdbms.strato.de","", "")
    3. or die ("keine Verbindung möglich.
    4. Benutzername oder Passwort sind falsch");
    5. mysql_select_db("")
    6. or die ("Die Datenbank existiert nicht.");
    7. $table = "zweierteam";
    8. $res = mysql_query("SELECT * from " . $table);
    9. // Sucht alle Felder der Datenbank datenbankname zusammen aus der Tabelle tabellenname
    10. $fields = mysql_list_fields('DB702913','zweierteam');
    11. // Zählt die Felder und übergibt an $columns.
    12. $columns = mysql_num_fields($fields);
    13. // übergibt die Namen an $out.
    14. for ($i = 0; $i < $columns; $i++)
    15. {
    16. $l = mysql_field_name($fields, $i);
    17. $csv_data1 .= '"'.$l.'",';
    18. }
    19. $csv_data1 .="\r\n";
    20. // sammelt alle einträge in $out.
    21. while ($l = mysql_fetch_array($res))
    22. {
    23. for ($i = 0; $i < $columns; $i++)
    24. {
    25. $csv_data2 .='"'.$l["$i"].'",';
    26. }
    27. $csv_data2 .="\r\n";
    28. }
    29. // öffnet file export.csv.
    30. $f = fopen ('export.csv','w+');
    31. //alle werte von $outgehn in die export.csv.
    32. $out = $csv_data2;
    33. fputs($f, $out);
    34. header('Content-type: application/csv');
    35. header('Content-Disposition: attachment; filename="export.csv"');
    36. readfile('export.csv');
    37. ?>
    Alles anzeigen



    Sorry, bin noch ziemlich neu bei PHP, vielleicht kann mir jemand helfen?
    Danke Tim
  • Das ist nicht die Hauptsache!

    Ich will das die Daten aus einer Zeile nicht hintereinander ausgegeben werden wie ganz oben im Quellcode dargestellt.

    Also nicht so

    201;Team Pest;Christian Orthofer;201.1;Slawomir Chrzesciewski;201.2;
    202;Rhönexpress;Andreas Remmert;202.1;Hans-Joachim Link;202.2;


    sondern so

    201;Team Pest;Christian Orthofer;201.1;
    201;Team Pest;Slawomir Chrzesciewski;201.2;
    202;Rhönexpress;Andreas Remmert;202.1;
    202;Rhönexpress;Hans-Joachim Link;202.2;


    Ich weiß nicht, wie ich den Script ändern soll das so ein Ergebnis bei rauskommt.
    Frage ist: geht das überhaupt?


    Gruß Tim
  • Klar geht das. Allerdings ist es etwa aufwendiger. Das Problem, was ich sehe ist folgendes: Du willst in der zweiten Zeile auch "201" stehen haben, allerdings steht es im Originalstring nur einmal drin und zwar am Anfang. Du musst dir also merken, wann du eine neue Zeile beginnst. Was ist denn mit den ursprünglichen Anführungsstrichen? Sollen die bleiben oder eher nicht? Dein Beispielergebnis sieht nicht so aus.

    Hast du noch weitere Transformationen vor?

    EDIT: Kannst du mal bitte einen SQL-Export der ersten paar Zeilen machen? Dann kann ich das mal hier testen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mad ()

  • Hi!

    Echt? das geht!
    Ich kann das mit meinem Wissen nicht realisieren!

    Was brauchst Du denn von mir?
    Die jetzige CSV-Datei? Oder die PHP Datei? Verstehe das mit SQL Export nicht.

    Die Trennung in der csv soll nur per Semikolon geschehen!


    Schick Dir mal beides!


    Gruß Tim
    Dateien
    • test.zip

      (2,91 kB, 572 mal heruntergeladen, zuletzt: )
  • Also. Die Frage ist, ob du nur das machen willst, was du oben geschrieben hast.
    Ich würde das Originalscript beibehalten und ein neues daneben legen.

    Ich habe dir mal ein Script gebaut, was genau das macht, was du beschrieben hast. Allerdings relativ undynamisch für Zweierteams. Wenn du das ganze auf Vierer- oder Sechserteams ausweiten willst, muss das Script noch etwas Dynamik spendiert bekommen.

    Hier erst einmal das Zweierteamscript:

    Quellcode

    1. <?php
    2. $verbindung = mysql_connect ("","", "")
    3. or die ("keine Verbindung möglich.
    4. Benutzername oder Passwort sind falsch");
    5. mysql_select_db("")
    6. or die ("Die Datenbank existiert nicht.");
    7. $table = "";
    8. $res = mysql_query("SELECT * from ".$table);
    9. // sammelt alle einträge in $out.
    10. while ($l = mysql_fetch_assoc($res))
    11. {
    12. $data = array($l['snumber'], $l['teamname'], $l['mann_1'], $l['teilnehmer1']);
    13. $data2 = array($l['snumber'], $l['teamname'], $l['mann_2'], $l['teilnehmer2']);
    14. $out .= '"'.implode('";"', $data).'";'.chr(13).chr(10);
    15. $out .= '"'.implode('";"', $data2).'";'.chr(13).chr(10);
    16. }
    17. // öffnet file export.csv.
    18. $f = fopen ('export.csv','w+');
    19. //alle werte von [COLOR="Red"]$out[/COLOR] gehn in die export.csv.
    20. fputs($f, $out);
    21. header('Content-type: application/csv');
    22. header('Content-Disposition: attachment; filename="export.csv"');
    23. readfile('export.csv');
    24. ?>
    Alles anzeigen


    Datenbankwerte sind entsprechend anzupassen.

    Ich bitte zu beachten, dass ich seit langem mal wieder PHP programmiert habe. Das ganze geht sicher noch einfacher und eleganter. Aber es erfüllt den Zweck.

    Ist denn eine Ausweitung auf Vierer- und Sechserteams geplant? (Das Originalscript beinhaltet das ja bereits)
  • Hi!

    Kriege folgende Fehlermeldung:

    Quellcode

    1. Warning: Cannot modify header information - headers already sent by (output started at /mnt/web3/10/29/52133829/htdocs/anmeldung/csv/csv.php:2) in /mnt/web3/10/29/52133829/htdocs/anmeldung/csv/csv.php on line 28
    2. Warning: Cannot modify header information - headers already sent by (output started at /mnt/web3/10/29/52133829/htdocs/anmeldung/csv/csv.php:2) in /mnt/web3/10/29/52133829/htdocs/anmeldung/csv/csv.php on line 29
    3. "101";"MTB Freunde Sontra";"Torsten Hoßbach";""; "101";"MTB Freunde Sontra";"";""; "102";"SSV Bad Salzungen";"Matthias Schudera";""; "102";"SSV Bad Salzungen";"";""; "103";"-";"Rene Fischer";""; "103";"-";"";""; "104";"MTB Team Heiligenhaus";"Holger Laudert";""; "104";"MTB Team Heiligenhaus";"";""; "105";"TV Barchfeld";"Marko Weber";""; "105";"TV Barchfeld";"";""; "106";"MTB Freunde Sontra";"Sebastian Schellenberg";""; "106";"MTB Freunde Sontra";"";""; "107";"-";"David Becker";""; "107";"-";"";"";
  • Hi!

    Tja, ich hab das mal mit meiner alten Datei verglichen, passt alles!
    Rufe das Script direkt auf.

    EDIT:
    Hatte ein Leerzeichen zum Anfang drin!
    Aber die Ausgabe schaut folgendermassen aus:

    101 MTB Freunde Sontra Torsten Hoßbach
    101 MTB Freunde Sontra
    102 SSV Bad Salzungen Matthias Schudera
    102 SSV Bad Salzungen
    103 - Rene Fischer
    103 -
    104 MTB Team Heiligenhaus Holger Laudert
    104 MTB Team Heiligenhaus
    105 TV Barchfeld Marko Weber
    105 TV Barchfeld
    106 MTB Freunde Sontra Sebastian Schellenberg
    106 MTB Freunde Sontra
    107 - David Becker
    107 -


    War das jetzt für das Zweierteam gedacht? Denke ja, denn ich hab nun das einerteam genommen!
    Vielleicht lieht es daran!