Ergebnis 1 bis 17 von 17

Thema: Formulardaten beim Absenden lokal auf dem Server als Datei speichern

  1. #1
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard Formulardaten beim Absenden lokal auf dem Server als Datei speichern

    Hallo liebe Contao Community,

    gibt es ein Modul oder eine einfache Möglichkeit um eine erzeugte CSV bzw. XML Formulardatei auch lokal auf dem Server zu speichern?

    LG,
    Dirk

  2. #2
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    schau dir mal folgende ERrweiterung an:
    http://www.contao.org/erweiterungsli...140009.de.html

  3. #3
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Danke für den Tipp. Leider speichert die EFG Erweiterung die Daten in der Datenbank. Die Formulardaten sollten aber beim Absenden als CSV Datei auf dem Server gespeichert werden.

  4. #4
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

  5. #5
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Ja schon, aber die Formulardaten werden in der Datenbank gespeichert und ich müsste jedes mal im Backend als CSV exportieren. Ich möchte aber das die Daten eines ausgefüllten Formulares direkt als CSV Datei auf dem Server in einem Ordner gespeichert werden. Zur Verwaltung nutzen wir das Programm Filemaker. Filemaker importiert via FTP Zugang die CSV Datei, welche auf dem Server abgelegt wurde. Soweit der Plan in der Theorie.

  6. #6
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Hat niemand eine Idee? Die erzeugte CSV Datei für das Formular soll also nicht per eMail Anhang versendet werden sondern in einem Ordner auf dem Server gespeichert werden.

  7. #7
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Du könntest die CSV direkt aus der Datenbank erzeugen. Nur wann ist halt die Frage... bei Submit oder per Cron. Wobei ich beim Submit keine AHnung hab wie man das abfängt ;-)

  8. #8
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Die CSV Datei wird ja schon automatisch in Contao erzeugt. Ich möchte sie nur nicht als eMail Anhang erhalten sondern sie automatisiert auf dem Server speichern. Kann man das z.B. über den php Befehl fwrite lösen?

  9. #9
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Habs gelöst und per Hook eingebunden

    PHP-Code:
    public function processFormData($arrPost$arrForm$arrFiles)
        {
    if (
    $this->format == 'csv')
                {
                    
    $email=('"' implode('";"'$keys) . '"' "\n" '"' implode('";"'$values) . '"');
                }
    $dateiname time().'.csv'// Name der Datei
    // Datei öffnen,
    // wenn nicht vorhanden dann wird die Datei erstellt.
    $handler fOpen($dateiname "a+");
    // Dateiinhalt in die Datei schreiben
    fWrite($handler $email);
    fClose($handler); // Datei schließen
        


  10. #10
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Hab mich wohl etwas zu früh gefreut. Die Formulareingaben werden nicht in die CSV Datei geschrieben :-(

    Hat da jemand einen Tipp?
    Es dreht sich sicher um diesen Code hier:
    PHP-Code:
    if ($this->format == 'csv')
                {
                    
    $email=('"' implode('";"'$keys) . '"' "\n" '"' implode('";"'$values) . '"');
                } 

  11. #11
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Hat keiner eine Idee wie ich die Formularwerte in meine erzeugte CSV Datei bekomme?
    PHP-Code:
    class Service extends Frontend
    {

        
        public function 
    processFormData($arrPost$arrForm$arrFiles)
        {

    $verzeichnis "Formulardaten";
    $dateiname time().'.csv'// Name der Datei
    // Datei öffnen,
    // wenn nicht vorhanden dann wird die Datei erstellt.
    $handler fOpen($verzeichnis "/" $dateiname "a+");
    // Dateiinhalt in die Datei schreiben
    if ($this->format == 'csv')
                {
                    
    $email = ('"' implode('";"'$keys) . '"' "\n" '"' implode('";"'$values) . '"');
                }
    fWrite($handler $email);
    fClose($handler); // Datei schließen
        
    }

    Die CSV Datei wird wie gewünscht mit einem Zeitstempel auf dem Server im Ordner gespeichert. Leider sind keine Werte drin :-( Bin leider nicht der PHP Profi und bin für jede Hilfe dankbar.

  12. #12
    Contao-Nutzer
    Registriert seit
    18.07.2011.
    Beiträge
    16

    Standard CSV in Datei

    Hallo dirksche,

    Dein Hook wird aus /system/modules/frontend/Form.php [Zeile 436ff.] aufgerufen, und zwar aus der Methode "protected function processFormData($arrSubmitted)". Das ist eine protected Methode, die Ihre Eigenschaften nicht verrät. Deshalb sind weder $this->format noch $keys und $values in Deiner public-Funktion verfügbar. Auch den bereits zusammengebaute CSV-String kannst Du nicht erreichen, den musst Du also leider nochmal generieren.

    Dein Code könnte dann in etwa so aussehen:

    PHP-Code:
    class Service extends Form 
        public function 
    processFormData($arrPost$arrForm$arrFiles) {
            foreach (
    $arrPost as $k=>$v) {
                if (
    $k == 'cc') {
                    continue;
                    }
                
                
    $v deserialize($v);
                
                
    // Skip empty fields
                
    if ($arrForm['skipEmpty'] && !is_array($v) && !strlen($v)) {
                    continue;
                    }
                
                
    // Add field to message
                
    $message .= ucfirst($k) . ': ' . (is_array($v) ? implode(', '$v) : $v) . "\n";
                
                
    // Prepare XML file
                
    if ($arrForm['format'] == 'xml') {
                    
    $fields[] = array
                        (
                        
    'name' => $k,
                        
    'values' => (is_array($v) ? $v : array($v))
                        );
                    }
                
                
    // Prepare CSV file
                
    if ($arrForm['format'] == 'csv') {
                    
    $keys[] = $k;
                    
    $values[] = (is_array($v) ? implode(','$v) : $v);
                    }
                    
                }
                    
            
    /* Ab hier Dein leicht modifizierter Originalcode */
            
            
    $verzeichnis "Formulardaten";
            
    $dateiname time().'.csv'// Name der Datei
            
            // Datei öffnen,
            // wenn nicht vorhanden dann wird die Datei erstellt.
            
    $handler fopen($verzeichnis "/" $dateiname "a+");
            
            
    // Dateiinhalt in die Datei schreiben
            
    $email = ('"' implode('";"'$keys) . '"' "\n" '"' implode('";"'$values) . '"');
            
    fwrite($handler $email);
            
            
    // Datei schließen
            
    fclose($handler); // Datei schließen
            
    }
        } 
    Bitte achte darauf, dass leere Felder übersprungen werden, wenn dies im Formular aktiviert ist. Dadurch kann Deine CSV-Datei unterschiedliche Felder bekommen, was beim Import in FileMaker dann eine Rolle spielen kann. Außerdem enthalten die Formulardaten auch die Felder FORM_SUBMIT und MAX_FILE_SIZE. Eventuell kannst Du Dir im Code die IF-Condition für das XML-File sparen (löschen).

    Deine Klasse erweitert die "Form"-Klasse (extends Form). Die Schreibweise für fopen, fwrite und fclose ist all lowercase.

  13. #13
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Hallo Attila,

    zuerst einmal ein großes Danke für Deine Hilfe :-)
    Leider erhalte ich beim Absenden des Formulares nun eine Fehlermeldung. Hab mal davon ein Screenshot erstellt. Vielleicht siehst Du wo der Fehler liegt?
    Angehängte Grafiken Angehängte Grafiken

  14. #14
    Contao-Nutzer
    Registriert seit
    18.07.2011.
    Beiträge
    16

    Standard CSV in Datei

    Hallo dirksche,
    sorry, da ist wohl doch noch ein Fehler drin, den ich übersehen habe:

    Die Klasse Service enthält eine Methode "processFormData", die versucht, die Methode der Elternklasse zu überschreiben (wegen des gleichen Namens). Versuch doch mal, die Methode umzubenennen in "myProcessFormData". Dann musst Du natürlich in Deiner config den Hook entsprechend registrieren:

    $GLOBALS['TL_HOOKS']['processFormData'][] = array('Service', 'myProcessFormData');

    Wo hast Du denn den Aufruf des Hooks registriert und wo liegt Deine php-Datei? Welche Contao-Version verwendest Du?

    Ich habe Dir mal ein ZIP angehängt, das Du entpackt in den Ordner ./system/modules/ Deiner Contao-Installation legen kannst. Damit erziele ich das gewünschte Ergebnis. Dann brauchst Du auch an Deinen Config-Files keine Änderungen mehr durchzuführen. Wichtig ist natürlich, dass Dein Formular im Contao-Formulargenerator auf das Format "CSV" gestellt ist, sonst sendet es nur Rohdaten und die Ausgabe ist leer.

    Freue mich über Feedback.

    Gruß
    Attila
    Angehängte Dateien Angehängte Dateien

  15. #15
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    644

    Standard

    Hi Attila,

    nochmals vielen lieben Dank für Deine Mühe. Habe Deine ZIP Datei in meinem System installiert und das Formular wieder getestet. Leider produziert es beim Absenden immer noch eine Fehlermeldung. Habe wieder einen Screenshot beigelegt. Das schreiben der CSV Datei auf dem Server funzt weiterhin gut. Ich verwende Contao 2.9.5 und habe die PHP Datei in einem Ordner "Service" unter .system/modules liegen.

    Gruß,
    Dirk
    Angehängte Grafiken Angehängte Grafiken

  16. #16
    Contao-Nutzer
    Registriert seit
    18.07.2011.
    Beiträge
    16

    Standard CSV in Datei

    Hi dirksche,

    ich fürchte, ich kann die Fehlermeldung, die Du bekommst, nicht zuordnen. Meine Contao-Version ist ebenfalls die 2.9.5 und die CSV-Datei wird fehlerfrei geschrieben. Ich bin noch nicht so tief in Contao eingetaucht, als dass ich beurteilen kann, warum der Funktion "Hybrid->__construct()" ein Argument fehlt. Aber offenbar fehlt beim rendern Deiner Seite ein Datenbank-Ergebnis.

    Eine letzte Vermutung habe ich noch, aber die ist eher schwach: Möglicherweise musst Du für Deine CSV-Datei einen vollständigen Serverpfad angeben (anstatt nur "Formulardaten"), also z.B. /var/www/web1160/html/unilux/system/Formulardaten oder ähnlich. Allerdings spricht die Tatsache, dass Dein System eine (leere) CSV-Datei schreibt dafür, dass Deine Pfadangabe stimmt.

    Eine andere Möglichkeit wäre noch, das Verzeichnis, in das Du schreibst, für Schreib- und Leserechte freizugeben. Das Anlegen der Datei scheint kein Problem zu sein, aber das beschreiben. Evtl. könnte das helfen.

    Aber das sind beides eher schwache Argumente, weil Du ja eine Datei in Deinem Verzeichnis bekommst, die nur leider leer ist. Für die genauere Analyse müsste ich mehr von Deinem System sehen, was wahrscheinlich eher unrealistisch ist. Evtl. verhindert eine andere Extension oder eine Einstellung das Beschreiben der Datei.

    Falls Du mir vertrauen willst, kannst Du mir gerne Zugansdaten für Dein System (Contao und FTP) per PM senden, dann sehe ich mir das Ganze mal an.

    Viele Grüße
    Attila

  17. #17
    Contao-Nutzer Avatar von fooddesign
    Registriert seit
    01.04.2011.
    Ort
    Zürich, Schweiz
    Beiträge
    84

    Standard FileMaker

    Also mit Filemaker würde das doch viel einfacher gehen... http://bit.ly/zQkIaV

    Auch Daten Texte, bereinigen oder beim Austausch in's richtige Format wandeln ist mit plugins von filemaker leicht realisierbar.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •