You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Saturday, May 29th 2010, 1:16am

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.

Source code

1
2
3
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",
201,"Team Pest","Christian Orthofer","201.1","Slawomir Chrzesciewski","201.2","","","","","","","","","","","","","","","","","","","",
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?

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
$verbindung = mysql_connect ("rdbms.strato.de","", "")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");

mysql_select_db("")
or die ("Die Datenbank existiert nicht.");

$table = "zweierteam";
$res = mysql_query("SELECT * from " . $table);

// Sucht alle Felder der Datenbank datenbankname zusammen aus der Tabelle tabellenname
$fields = mysql_list_fields('DB702913','zweierteam');

// Zählt die Felder und übergibt an $columns.
$columns = mysql_num_fields($fields);

// übergibt die Namen an $out.
for ($i = 0; $i < $columns; $i++)
{
  $l = mysql_field_name($fields, $i);
  $csv_data1 .= '"'.$l.'",';
}
$csv_data1 .="\r\n"; 

// sammelt alle einträge in $out.
while ($l = mysql_fetch_array($res))
{
  for ($i = 0; $i < $columns; $i++)
  {
    $csv_data2 .='"'.$l["$i"].'",';
  }
$csv_data2 .="\r\n"; 
}

// öffnet file export.csv.
$f = fopen ('export.csv','w+');

//alle werte von $outgehn in die export.csv. 
$out = $csv_data2; 
fputs($f, $out);  

header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="export.csv"');
readfile('export.csv');
?>



Sorry, bin noch ziemlich neu bei PHP, vielleicht kann mir jemand helfen?
Danke Tim

2

Saturday, May 29th 2010, 1:20am

Du willst nur das Komma gegen Semikolon tauschen? Dann schau mal Zeile 31:

PHP Quellcode

1
$csv_data2 .='"'.$l["$i"].'",';


ändern in

PHP Quellcode

1
$csv_data2 .='"'.$l["$i"].'";';


Zumindest, ist es das, was ich auf den ersten Blick sehe...

3

Saturday, May 29th 2010, 4:01am

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

4

Saturday, May 29th 2010, 11:01am

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...

This post has been edited 1 times, last edit by "mad" (May 29th 2010, 11:24am)


5

Saturday, May 29th 2010, 3:17pm

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
ttmobil has attached the following file:
  • test.zip (2.91 kB - 17 times downloaded - latest: Feb 7th 2012, 1:20pm)

6

Saturday, May 29th 2010, 3:45pm

Naja, die (exportierte) CSV-Datei hilft nicht weiter. Was helfen würde wäre ein Auszug aus der Datenbanktabelle. Also Mal Struktur und Daten exportieren bitte. Die CSV-Datei soll ja daraus erzeugt werden (durch das Script). Wenn man aber nicht weiß, wie die Datenbank aufgebaut ist, kommt man nicht zum Ergebnis...

7

Saturday, May 29th 2010, 3:46pm

OK, bin noch nicht lange auf ( Nachtschicht )!
Schicke Dir das gleich!

8

Saturday, May 29th 2010, 3:49pm

Here it is!

This post has been edited 1 times, last edit by "ttmobil" (May 29th 2010, 10:52pm)


9

Saturday, May 29th 2010, 3:51pm

Zweierteam!

This post has been edited 1 times, last edit by "ttmobil" (May 29th 2010, 10:52pm)


10

Saturday, May 29th 2010, 6:58pm

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:

PHP Quellcode

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


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)

11

Saturday, May 29th 2010, 7:13pm

Hi!

Das wäre jetzt aber ohne das Originalscript, richtig?
Es soll schon so sein, das Einer-, Zweier-, Vierer- und Sechserteam erfast wird und in einer CSV ausgegeben wird.

Ich denke, die "Dynamik" kriege ich nicht hin! ;-(

Gruß Tim

12

Saturday, May 29th 2010, 7:20pm

Hi!

Kriege folgende Fehlermeldung:

Source code

1
2
3
4
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

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
"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";"-";"";""; 

13

Saturday, May 29th 2010, 7:24pm

Ja, es ist ohne das Originalscript zu betreiben.
Den Fehler kann ich noch nicht nachvollziehen. Die DB-Daten hast du anscheinend korrekt ergänzt, sonst wären keine Daten da.
Hast du irgendetwas falsch kopiert? In welchem Kontext wird das Script ausgeführt? (Wie wird es aufgerufen?)

Wegen der Dynamik schauen wir dann noch einmal...

14

Saturday, May 29th 2010, 7:58pm

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!

15

Saturday, May 29th 2010, 8:05pm

Grass, mit dem zweierteam gehts!
Wenn ich die CSV mit Excel öffne, habe ich allerdings keine Semikolons drin.
Wichtig sind aber auch die Spaltenüberschriften, kann man die noch integrieren?

16

Saturday, May 29th 2010, 10:08pm

Ja, das geht.

Du müsstest dann mal Beispielausgaben für die anderen Teamvarianten zeigen. Dann kann ich auch mal schauen, wie man das am sinnvollsten realisiert.

Eigentlich ist das aber nicht schwer, du hast ja nun zwei Vorlagen. Hast du denn schon einmal programmiert?

17

Saturday, May 29th 2010, 10:27pm

HI!

Also Du meinst die SQL Varianten?
Hast Du ne Email Addi für mich, denn die Daten sollten eigentlich nicht ins Net!

Einer und Zweier hast Du schon, richtig?

Gruß Tim

18

Saturday, May 29th 2010, 10:29pm

Ich meine nicht die SQL-Daten, wobei dort beispielhaft auch Daten sinnvoll sind.

Ich meine eigentlich deine Zieldaten, also wie sie am Ende aussehen sollen... Oder einfach alle 4 bzw. 6 Personen untereinander?

Du brauchst die Daten nicht reinstellen. Du kannst auch oben die wieder rausnehmen ...

19

Saturday, May 29th 2010, 10:51pm

Hi!

Alles soll untereinander dargestellt werden.
Sinnvollerweise Einer, Zweier,... usw.

Joo, ich mach das oben wieder raus!


Gruß Tim

20

Sunday, May 30th 2010, 1:20pm

Moin!

Hab jetzt mal drei Tabellen integriert!
Funktioniert auch prima, aber wie bekomme ich das mit den Semis hin?

Wie kann ich in der CSv Spaltennamen vergeben.
Brauche für die teilnehmer1 - teilnehmer6 z.B. den Spaltennamen Stnr


Gruß Tim
ttmobil has attached the following file:
  • test.zip (692 Byte - 20 times downloaded - latest: Feb 7th 2012, 1:21pm)

Similar threads

Social bookmarks