php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.02.2012, 13:05  
Benutzer
 
Registriert seit: 27.08.2010
Beiträge: 32
PHP-Kenntnisse:
Anfänger
Madenar76 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] CSV -Leere Zeile

Hallo,

icxh habe mal wieder (vermutlich) eine simple Frage. Ich habe ein Script geschrieben welches mit aus einer MySQL Datenbank eine csv-Datei erstellt. Das funktioniert alles super, allerdings einhält die CSV-Datei immer am Anfrang eine leere Zeile und ich weiss nicht warum. Kann mir jemand sagen wo mein Denkfehler liegt!

PHP-Code:
<?php

$datum 
date("Y-n-d");

$verbindung mysql_connect('localhost''root''marken05');
mysql_set_charset("latin1"$verbindung);

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

$beitraege_all mysql_query("select * from ankauf WHERE IO = '1' AND `paid` = '0'") or die(mysql_error());
$totalRows_beitraege_all mysql_num_rows($beitraege_all);
$spaltennamen = array('"Ankaufnummer"','"Kontoinhaber"','"Kontonummer"','"BLZ"','"IBAN"','"BIC"','"Betrag"');
$comma_separated implode(";",$spaltennamen);
echo 
$comma_separated;
echo 
"\r\n";

for(
$i=0$Export=""$i<$totalRows_beitraege_all$i++)
{
    
$Daten mysql_fetch_object($beitraege_all);
    
$Spalte[] = ($Daten->Ankaufnummer);
    
$Spalte[] = ($Daten->Kontoinhaber);
    
$Spalte[] = ($Daten->Kontonummer);
    
$Spalte[] = ($Daten->BLZ);
    
$Spalte[] = ($Daten->IBAN);
    
$Spalte[] = ($Daten->BIC);
    
$Spalte[] = ($Daten->Betrag);



    for(
$j=0$j<count($Spalte); $j++)
    {
        
$Export .= "\"" $Spalte[$j] . "\"";
        if(
$j!=count($Spalte)-1)
        {
            
$Export .= ";";
        }
    }
    
$Export .= "\r\n";
    
$Spalte "";

}

header("Content-type: application/x-msdownload");
header("Content-Disposition: attachment; filename=auszahlungen_$datum.csv");
header("Pragma: no-cache");
header("Expires: 0");

print 
$Export;
?>
Danke schon einmal im vorraus für eure Hilfe

Madenar
Madenar76 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.02.2012, 13:09  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

http://www.ietf.org/rfc/rfc4180.txt

RFC4180 > 2 > 3
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 02.02.2012, 13:33  
Benutzer
 
Registriert seit: 27.08.2010
Beiträge: 32
PHP-Kenntnisse:
Anfänger
Madenar76 befindet sich auf einem aufstrebenden Ast
Standard

sorry, ich weiss nicht was da damit meinst
Madenar76 ist offline   Mit Zitat antworten
Alt 02.02.2012, 13:37  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Hm...eigentlich hat er "alles" gesagt - nur halt prägnanter ! Die ersten 3-4 Punkte dürften Dir reichen, um dein Problem zu verstehen. Steht im Beispiellink als Überschrift:
Zitat:
Common Format and MIME Type for Comma-Separated Values (CSV) Files
mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 02.02.2012, 13:54  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Rfc4180
Zitat:
rfc 4180 common format and mime type for csv files
> 2
Zitat:
2. Definition of the csv format
> 3
Zitat:
3. there maybe an optional header line appearing as the first line
of the file with the same format as normal record lines.
this
header will contain names corresponding to the fields in the file
and should contain the same number of fields as the records in
the rest of the file (the presence or absence of the header line
should be indicated via the optional "header" parameter of this
mime type). For example:

field_name,field_name,field_name crlf
aaa,bbb,ccc crlf
zzz,yyy,xxx crlf
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 02.02.2012, 14:18  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

das erklärt aber in seinem Fall nicht, warum eine Leerzeile dort steht - weil diese Überschriften-Zeile ja "optional" ist.
Ich speichere meine CSV allerdings auf <temp> als Datei (einfach per fwrite) - damit weiß ich genau was darin landet, und dann schiebe ich den Download nicht als spezieller CSV-Mimetyp an, sondern als generischer Datei-Download .. und damit hat es sich erledigt

Für den TE .. du solltest deine ÜberschriftenZeile nicht per echo ausgeben - dann knallt es wegen "headers already sent" ... oder benutzt du output-Buffering und zeigst es nur nicht ? ..
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

Geändert von eagle275 (02.02.2012 um 14:22 Uhr).
eagle275 ist offline   Mit Zitat antworten
Alt 02.02.2012, 14:21  
Benutzer
 
Registriert seit: 27.08.2010
Beiträge: 32
PHP-Kenntnisse:
Anfänger
Madenar76 befindet sich auf einem aufstrebenden Ast
Standard

Danke erstmal für eure Antworten, aber tut mir leid ich habe das Memo nun hoch und runter glelesen und verstehe es leider wirklich nicht. Auch googeln hat mich leider nicht weitergebracht, d.h. ich weiss nicht was an meinem Quellcode falsch ist oder warum oder wo das Script die leere Zeite erzeugt. Ich hoffe Ihr seid nicht sauer das ich hier noch einmal poste, aber im Moment habe ich keine Ahnung wie der Fehler zu beheben ist.

MFG

Madenar
Madenar76 ist offline   Mit Zitat antworten
Alt 02.02.2012, 14:28  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

englisch = schwer

also - der von dir per Header signalisierte MIME-Typ CSV besagt :

es kann eine Separate Überschriften-Zeile geben, die die SpaltenNamen transportiert - mit genau so vielen Spalten wie deine Daten
Diese Zeile muss ihrerseits mit einem "header" gesendet werden, da du das nicht machst, geht "er" wohl davon aus, dass es eine "leere" ÜberschriftenZeile gibt, und daher gibt er den Zeilenumbruch in der ersten Zeile der Datei aus.

Abhilfe hab ich dir beschrieben, speichere deine CSV als reguläre temporäre Datei auf deinem Webserver, dann schiebe den Download als reguläre Datei an. Wenn du die CSV per Hand erstellst, mischt sich auch niemand ein, wie sie aussieht

ABER du darfst VOR den header-Zeilen im Script, die den Download anschieben KEINERLEI AUSGABEN machen ... deine echo's da müssen Fehler auslösen
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 02.02.2012, 14:42  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Ich wollte auch nur drauf hinweisen wofür die erste Zeile gedacht ist und nicht erklären warum sie Leer ist.

An seiner stelle würde ich erstmal diverse Fallstricke aus dem von ihm geposteten Quellcode entfernen und strikter Programmieren: Nur was nötig ist.

PHP-Code:
// open in-memory handle for file-like creation with max-size of 16 MB
$csv fopen('php://temp/maxmemory:'.(string)( 16 1024 1024 ), 'w+');

// query Database
$result mysql_query("SELECT Ankaufnummer, Kontoinhaber, Kontonummer, BLZ, IBAN, BIC, Betrag FROM ankauf WHERE IO = '1' AND `paid` = '0'");

// push head-line to memory
fputcsv($csv, array('Ankaufnummer''Kontoinhaber''Kontonummer''BLZ''IBAN''BIC''Betrag'));

// push database rows to memory
while ( $data mysql_fetch_assoc($result) ) fputcsv($csv$data);

// reset memory stream
rewind($csv);

// send headers
header("Content-type: application/x-msdownload"); 
header("Content-Disposition: attachment; filename=auszahlungen_$datum.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0");

// send "filecontent" from memory stream
stream_get_contents($csv);

// close ( and destroy data in memory )
fclose($csv); 
Warum die erste Zeile leer ist errate ich jetzt einfachmal: vor dem <?php ist eine Leerzeile oder Byte-Order-Mark ( BOM ) / NUL-Sign
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (02.02.2012 um 14:48 Uhr).
tr0y ist offline   Mit Zitat antworten
Alt 02.02.2012, 14:58  
Benutzer
 
Registriert seit: 27.08.2010
Beiträge: 32
PHP-Kenntnisse:
Anfänger
Madenar76 befindet sich auf einem aufstrebenden Ast
Standard

Erst einmal recht vielen Danlk für eure Hilfe. In der Tat hat tr0y recht, es gab eine leere Zeile oberhalb des Scripts.

Zur Strafe werde ich nun 1000-mal "Ich werde zuerst nach Leere Zeilen suchen" schreiben.

Vielen Dank noch einmal.
Madenar76 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] CSV - Leere erste zeile - fputcsv Ralf-2011 PHP Einsteiger 9 16.06.2011 06:42
[Erledigt] Felder einer Zeile vergleichen und auswerten lobba Datenbanken 6 10.01.2011 23:14
PHP fügt leere Zeile ein 3jfx PHP Tipps 2010 9 14.09.2010 15:55
[Erledigt] Problem mit Zeile löschen Tabelle Javascript nBassCom JavaScript, Ajax und mehr 2 02.06.2010 14:36
String Zeile für Zeile kürzen fdm PHP Tipps 2009 5 08.03.2009 22:18
[Erledigt] Erste Zeile einfügen oder löschen in csv solvero PHP Tipps 2009 6 08.03.2009 21:43
Lange Zahlenkombination in kurze Zeichenfolge umwandeln Heinerlutscher PHP-Fortgeschrittene 27 28.02.2009 16:45
[Erledigt] Leere Zeile in csv löschen... solvero PHP Tipps 2008 2 04.10.2008 11:05
[Erledigt] 'upload-Datei' Zeile für Zeile auslesen Felix PHP Tipps 2008 18 29.06.2008 02:55
Zeile einfügen tennessee Server, Hosting und Workstations 5 02.06.2006 21:05
auswahlliste, leere zeile PHP Tipps 2007 2 26.11.2005 14:39
durchlauf,zeile für zeile + update Skazi Datenbanken 10 25.11.2004 13:59
[Erledigt] Problem mit einer Website PHP Tipps 2004 12 06.08.2004 10:34
[Erledigt] Funktion MAIL() funkt nicht PHP Tipps 2004 16 11.07.2004 17:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
leerzeile anfang csv datei, blz bic code csv, mysql_connect mysql_set_charset(\'latin1\');, php export csv memory, leerspalte csv, php echo leerzeile, fputcsv leere zeile

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum