{{indexmenu_n>100}}
====== Formularergebnis als CSV-Datei ======
Mit diesem Hack kann die Auswertung der Formulareingaben die im BE beim CP Formular unter dem ##Download-Button## sichtbar wird als CSV-Datei abgespeichert werden. \\ //([[http://de.wikipedia.org/wiki/CSV_(Dateiformat)]])//
Die hier vorgestellt Lösung fügt einen CSV Download-Link in die aufgerufene Download-Ausgabe unten an. \\
Die URL kann auch händische in der URL-Zeile des Browsers geändert werden .
Aus \\
##%%http://example.com/include/inc_act/act_export.php?action=exportformresult&fid=8%%## \\
wird \\
##%%http://example.com/include/inc_act/act_export.php?action=exportformresultcsv&fid=8%%##
(exportformresult nach exportformresult**csv** ändern).
Nach nochmaligem Absenden dieser Eingabe oder dem Betätigen des neuen Links ##Download CSV-File## wird ein Download der Daten im CSV-Format angeboten.
**Eine andere Lösung ohne Hack** ist die Ausgabe über den ##Download-Button##, das Abspeichern des jetzt erzeugten Quelltextes in eine Datei, die dann als HTML-Datei in z.B. Excel eingelesen werden kann.
\\
===== Voraussetzungen =====
- dazu sind im Formular unter "Datenbank":
- Der Schalter **[x]** Formularergebnis speichern
- Der Schalter **[x]** Benutzerdaten speichern
\\
----
Docu: -- \\
Forum: [[http://forum.phpwcms.org/viewtopic.php?p=135673|Anfrage Änderung -Formular / Download-Button-]]
**Autor:** K.Heermann (flip-flop) http://planmatrix.de \\ //(17.05.2012)//
**CMS Version:** >= 1.4 \\
**Version:** V1.0 17.05.2012 \\
**Update V1.1 18.05.2012:** Standardkonforme CSV-Ausgabe auch bei " und/oder einem Feldtrenner im Zellentext, \\
siehe [[http://forum.phpwcms.org/viewtopic.php?p=135720#p135720]].
**Dateiname:** include/inc_act/act_export.php
----
\\
==== Codeschnipsel V1.1 (Hack) ====
**Update V1.1 18.05.2012:** Standardkonforme CSV-Ausgabe auch bei " und/oder einem Feldtrenner im Zellentext, \\
siehe [[http://forum.phpwcms.org/viewtopic.php?p=135720#p135720]].
Als Feldtrenner wird hier ein ##**;**## verwendet, einstellbar in der Variablen **$separator**, etwa in Zeile 140.
Erweiterung der Datei **include/inc_act/act_export.php** etwa ab Zeile 120. \\
Das erste ##exit();## wird ersetzt durch:
// +KH 17.05.12: ==================================================================
// Dowload Link CSV-File
echo ''.LF;
// ================================================================================
exit();
// +KH 17.05.12: ==================================================================
} elseif($action == 'exportformresultcsv' && isset($_GET['fid']) && ($fid = intval($_GET['fid']))) {
// $data = _getDatabaseQueryResult("SELECT *, DATE_FORMAT(formresult_createdate, '%Y-%m-%d %H:%i:%S') AS formresult_date FROM ".DB_PREPEND.'phpwcms_formresult WHERE formresult_pid='.$fid);
$data = _dbQuery("SELECT *, DATE_FORMAT(formresult_createdate, '%Y-%m-%d %H:%i:%s') AS formresult_date FROM ".DB_PREPEND.'phpwcms_formresult WHERE formresult_pid='.$fid);
if(!$data) die('Just a problem!');
$separator =';'; // CSV-Feldseparator
$export = array();
$row = 1;
$export[0] = array('#'=>'','#ID'=>'','#Date'=>'','#IP'=>'');
// run all data first and combine array elements
foreach($data as $key => $value) {
// numbering starting at 1
$export[$row]['#'] = $row;
$export[$row]['#ID'] = $value['formresult_id'];
$export[$row]['#Date'] = $value['formresult_createdate'];
$export[$row]['#IP'] = $value['formresult_ip'];
$val_array = @unserialize($value['formresult_content']);
if(is_array($val_array) && count($val_array)) {
foreach($val_array as $a_key => $a_value) {
$export[$row][$a_key] = $a_value;
$export[0][$a_key] = '';
}
}
$row++;
}
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s GMT', time()) );
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0');
$filename = date('Y-m-d_H-i-s').'_formresultXmlID-'.$fid.'.csv';
header('Content-Type: text/comma-separated-values');
header( 'Content-Transfer-Encoding: BASE64;' );
header('Content-Disposition: attachment; filename="'.$filename.'"');
$elements = array();
// ---- Kopfzeile
$elements[0] = '';
foreach($export[0] as $key => $value) {
$elements[0] .= '';
$elements[0] .= $key;
$elements[0] .= $separator;
}
$elements[0] = substr($elements[0], 0, -1); // letztes ";" in Zeile loeschen
// ---- Naechste Zeilen
for($x = 1; $x < $row; $x++) {
$elements[$x] = '';
foreach($export[0] as $key => $value) {
$elements[$x] .= '';
// if ( isset($export[$x][$key]) ) {
// // Nicht zwingen notwenig, nur um fuer HTML-Darstellung
// $export[$x][$key] = html_specialchars($export[$x][$key]);
// Jede Spalte wird standardkonform in "..." gesetzt (OG: 18.05.2012)
$export[$x][$key] = str_replace(chr(13),'', $export[$x][$key]); // CR loeschen wenn vorhanden (LF bleibt bestehen wenn vorhanden)
$export[$x][$key] = '"'.str_replace('"', '""', $export[$x][$key]).'"'; // Jede Spalte in "..." setzen
// }
$elements[$x] .= $export[$x][$key];
$elements[$x] .= $separator; // CSV-Trenner setzen
}
$elements[$x] = substr($elements[$x], 0, -1); // letztes ";" in Zeile loeschen
unset($export[$x]); // free memory
}
echo implode(chr(13).chr(10), $elements); // CRLF am Zeilenende anfuegen
exit();
// ================================================================================
\\
Es ist ratsam die Originaldatei vor dem Hack umzubenennen nach z.B. **act_export_org.php** und die gepatchte Datei nochmals abzulegen unter z.B. **act_export_patch.php**.
Das ist hilfreich bei einem Update des Systems, bei dem die jetzt gepatchte Datei **act_export.php** u.U. überschrieben wird.
So kann nach einem Update leicht dieser Hack wieder eingesetzt werden.
\\