{{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 '
Download CSV-File'.LF.'
'.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. \\