• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

SELECT als CSV-Datei anbieten

KIUNES

New member
So der KIUNES wieder mal,

also ich habe jetzt meine Kunden in einer statistik tabelarisch, durch die suchkreterein selektiert, aufgelistet. Jetzt will ich gerne so ein button machen, dass ich mir die grade ausgegebene Tabelle als CSV downloaden kann. Folgendes hab ich dazu gefunden, ich weiß wie ich daten in das array packe, aber wie wo und überhaupt kann ich die erstellte datei finden?
PHP:
<?php

$list = array (
    'aaa,bbb,ccc,dddd',
    '123,456,789',
    '"aaa","bbb"'
);

$fp = fopen('file.csv', 'w');

foreach ($list as $line) {
    fputcsv($fp, split(',', $line));
}

fclose($fp);
?>
 
Zuletzt bearbeitet:
aber wie wo und überhaupt kann ich die erstellte datei finden?

Die Datei wird in dem Verzeichnis erstellt und gespeichert in dem sich die PHP-Datei befindet in der du das
PHP:
$fp = fopen('file.csv', 'w');
ausführst.
 
Ab und an mal einen Blick ins PHP Manual zu werfen würde sicherlich helfen.

Außerdem könnte man sich fragen, warum man erst eine CSV Datei auf dem Server erstellen muss, wenn man sie doch eigentlich auf dem Client generieren möchte (sprich Download).
 
Ja das will ich ja, der soll die nicht speichern, sondern nur generieren zum downloaden, finde nur leider nix bei google!
 
Dann musst du hald den richtigen Header anbieten:
Code:
header('Content-Type: application/x-download');
header('Content-Length: ' . strlen($f));
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Cache-Control: private, max-age=0, must-revalidate');
 
Ja so wie du gesagt hast:
PHP:
<?php
   
header('Content-Type: application/x-download');
header('Content-Length: ' . strlen($f));
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Cache-Control: private, max-age=0, must-revalidate');

$list = array (
    'aaa,bbb,ccc,dddd',
    '123,456,789',
    '"aaa","bbb"'
);

$fp = fopen('file.csv', 'w');

foreach ($list as $line) {
    fputcsv($fp, split(',', $line));
}

fclose($fp);
?>
 
Äh - nö.
PHP:
<?php
$file="file.csv";
$list = array (
    'aaa,bbb,ccc,dddd',
    '123,456,789',
    '"aaa","bbb"'
);
$f = implode("\n", $list);

header('Content-Type: application/x-download');
header('Content-Length: ' . strlen($f));
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Cache-Control: private, max-age=0, must-revalidate');

echo $f;
?>
 
Joh geil dat funzt :)
Allerdings öffnet sich das automatisch, will ja ein download-button dafür haben, kann ich die funktion so direkt ansprechen oder nur mit ner if-funktion und dann sag ich mal mit GET &csv=1 übergeben?
 
Irgendwas passt da noch nicht:
1. zeigt der in der CSV nicht das was im array steht an sondern "<html xmlns="http://www.w3.org/1999/xht"

2. bleibt die seite weiß, aber ich will die funktion in der statistik.php laufen lassen, geht das oder muß ich extra die werte auf ne neue seite übergeben?
 
Irgendwas passt da noch nicht:
1. zeigt der in der CSV nicht das was im array steht an sondern "<html xmlns="http://www.w3.org/1999/xht"
Da das nicht im geposteten Code vorkommt, hast Du das wohl selbst reingeschrieben, oder Du hast Dich selbst ausgetrickst.

2. bleibt die seite weiß, aber ich will die funktion in der statistik.php laufen lassen, geht das oder muß ich extra die werte auf ne neue seite übergeben?
Beides ist machbar.

Außerdem wäre es sinnvoll für eine CSV Datei auch den richtigen MIME-Typ mitzuliefern, damit der Browser gleich erkennt, dass er die Daten auch mit einer Tabellenkalkulation öffnen könnte und dies als zusätzliche Option (neben dem Download) anbietet.
 
Also der der inhalt, der in der csv geliefert wir habe ich in meinem header
PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
aber warum packt der das in das array?
 
Ja, das darfst du dann natürlich nicht senden!
Nur die Header und der Inhalt der Datei darf dann gesendet werden.
 
Also der der inhalt, der in der csv geliefert wir habe ich in meinem header
PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
aber warum packt der das in das array?
Dann also Option selbst ausgetrickst.
Du willst eine CSV Datei ausliefern, eine CSV Datei hat keinerlei HTML Tags. Wenn Du also welche da reinschreibst, dann hast Du eine hybride CSV/HTML Datei. Was Dein Office Programm daraus macht hast Du gesehen.
Du hast jetzt also zwei Optionen:
1. Du bringst dem Office Programm bei, die HTML Tags zu ignorieren oder
2. Du schreibst Dir ein Makro, welches die HTML Tags rausfiltert.


Option 3 überlass ich Deiner Fantasie.
 
variante 3: ich mach eine leere seite, mach ne db-connection, lasse die werte der vorherigen seite übergeben und pack diese in die csv! Möglich?
 
weil ich nur das suchkreterium übergebe, die ausgabe muss ich allerdings in der datei selbst aus der db holen, wären sonst ein paar 100 werte die ich übergeben müsste!
 
PHP:
<?PHP
$sql = mysql_query("SELECT * FROM ava_kunden WHERE orga='$orga' $agentx $statusx AND eintrag BETWEEN '$von' AND '$bis' ORDER BY eintrag DESC");
while($row = mysql_fetch_array($sql))
{
if($row['status']=="1"){$status="Bearbeitung";}
if($row['status']=="2"){$status="OK";}
if($row['status']=="3"){$status="Storno";}
if($row['status']=="4"){$status="Dublette";}
echo "'".$row['knr'].",".$row['vname'].",".$row['nname'].",".$row['eintrag'].",".$status.",".$row['agent']."'";
}
$file="csv_file.csv";
$list = array ();
$f = implode("\n", $list);
header('Content-Type: application/x-download');
header('Content-Length: ' . strlen($f));
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Cache-Control: private, max-age=0, must-revalidate');
echo $f;
?>

Der knallt mir jetzt die komplette Ausgabe in eine Zelle. Was mach ich falsch?
 
Zurück
Oben