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

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


Voraussetzungen

- dazu sind im Formular unter “Datenbank”:

  1. Der Schalter [x] Formularergebnis speichern
  2. Der Schalter [x] Benutzerdaten speichern



Docu: –
Forum: 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:

exportformresultcsv

// +KH 17.05.12: ==================================================================
// Dowload Link CSV-File
echo '<div style="padding:3px; margin-top:20px; border: 1px solid #aaa; width: 150px; text-align:center; font-weight:bold; background-color:#ddd;">
<a href="'.PHPWCMS_URL.'include/inc_act/act_export.php?action=exportformresultcsv&fid='.$fid.'">Download CSV-File</a>'.LF.'
</div>'.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.


deutsch/andere-erweiterungen/hacks/formularergebnis-download-csv.txt · Last modified: 2018/06/03 18:09 (external edit)
www.planmatrix.de www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0