Ergebnis 1 bis 7 von 7

Thema: processEfgFormData wird erst nach dem schreiben in die Datenbank ausgeführt

  1. #1
    Contao-Nutzer
    Registriert seit
    14.01.2010.
    Beiträge
    44

    Fehler processEfgFormData wird erst nach dem schreiben in die Datenbank ausgeführt

    Hallo,

    ich habe ein mehrseitiges Frontend-Formular, dessen Werte in einer Datenbank (catalog) gespeichert werden. Über eine Funktion die per processEfgFormData aufgerufen wird, kann ich die übertragenen Formularwerte verändern. Das klappt auch soweit, allerdings wird der Hook erst ausgeführt, nachdem die Daten in die catalog Datenbank geschrieben wurden. D.h. in der catalog Datenbank stehen die unveränderten Werte, in der Übersicht der gespeicherten Formularwerte im Modul "Formular-Daten" stehen hingegen die veränderten Werte. Welchen Hook muss ich ausführen, damit die Funktion noch vor dem speichern der Daten in der Datenbank ausgeführt wird?

    Danke!

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Welche Contao-Version?
    Ab 2.11, glaube ich, steht der storeFormData-HOOK

    PHP-Code:
    $GLOBALS['TL_HOOKS']['storeFormData'][] = array('myCallback''storeFormDataHook');


    public function 
    storeFormDataHook($arrData$arrForm)
    {


    zur Verfügung.

    Der ist ideal dafür, weil hier die Werte reinkommen, die direkt in die DB gespeichert werden.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  3. #3
    Contao-Nutzer
    Registriert seit
    14.01.2010.
    Beiträge
    44

    Standard

    Vielen Dank für den Tipp. Muss nun erst mal Contao updaten (bisher lief 2.10) und wieder zum laufen bringen.

    Nach dem Update kann ich keinen Focus mehr auf Formularfelder im Frontend setzen und damit auch keine Formulare mehr ausfüllen. Mal sehen, woran das nun liegt.

  4. #4
    Contao-Nutzer
    Registriert seit
    14.01.2010.
    Beiträge
    44

    Standard

    So, jetzt geht wieder alles! Vielen Dank für den neuen Hook. Der macht genau das, was ich gebraucht habe!

  5. #5
    Contao-Fan Avatar von rezico
    Registriert seit
    04.01.2011.
    Ort
    Nürnberg
    Beiträge
    451

    Standard

    Ich möchte hier auch nochmal einklinken.
    Offenbar ist es also möglich den Hook + den EFG zusammen zu verwenden.
    Der einzige Unterschied zwischen ihm und mir ist, dass ich direkt in die tl_member schreibe.

    Ich verwende den Hook im Grunde genauso wie er, sprich über ein mehrseitiges Formular, EFG und mit Speicherung in eine DB.

    Aber weshalb in Gottesnamen krieg ich sobald ich den Hook einbinde (unabhängig vom Inhalt) folgende Fehlermeldungen:

    PHP-Code:
    WarningInvalid argument supplied for foreach() in /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php on line 729
    #0 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php(729): __error(2, 'Invalid argumen...', '/usr/www/users/...', 729, Array)
    #1 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php(559): Database_Statement->escapeParams(NULL)
    #2 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(442): Database_Statement->set(NULL)
    #3 /usr/www/users/facts/_domains_/frauen.de/system/modules/efg/ExtendedForm.php(575): Form->processFormData(Array, Array)
    #4 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Hybrid.php(163): ExtendedForm->compile()
    #5 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(74): Hybrid->generate()
    #6 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(511): Form->generate()
    #7 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(194): Controller->getContentElement('12')
    #8 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Module.php(140): ModuleArticle->compile()
    #9 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(71): Module->generate()
    #10 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(443): ModuleArticle->generate(false)
    #11 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(307): Controller->getArticle('12', false, false, 'main')
    #12 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #13 /usr/www/users/facts/_domains_/frauen.de/index.php(266): PageRegular->generate(Object(DB_Mysql_Result))
    #14 /usr/www/users/facts/_domains_/frauen.de/index.php(401): Index->run()
    #15 {main}

    Warningarray_keys() [function.array-keys]: The first argument should be an array in /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php on line 565
    #0 [internal function]: __error(2, 'array_keys() [<...', '/usr/www/users/...', 565, Array)
    #1 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php(565): array_keys(NULL)
    #2 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(442): Database_Statement->set(NULL)
    #3 /usr/www/users/facts/_domains_/frauen.de/system/modules/efg/ExtendedForm.php(575): Form->processFormData(Array, Array)
    #4 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Hybrid.php(163): ExtendedForm->compile()
    #5 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(74): Hybrid->generate()
    #6 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(511): Form->generate()
    #7 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(194): Controller->getContentElement('12')
    #8 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Module.php(140): ModuleArticle->compile()
    #9 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(71): Module->generate()
    #10 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(443): ModuleArticle->generate(false)
    #11 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(307): Controller->getArticle('12', false, false, 'main')
    #12 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #13 /usr/www/users/facts/_domains_/frauen.de/index.php(266): PageRegular->generate(Object(DB_Mysql_Result))
    #14 /usr/www/users/facts/_domains_/frauen.de/index.php(401): Index->run()
    #15 {main}

    Warningimplode() [function.implode]: Invalid arguments passed in /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php on line 565
    #0 [internal function]: __error(2, 'implode() [set(NULL)
    #3 /usr/www/users/facts/_domains_/frauen.de/system/modules/efg/ExtendedForm.php(575): Form->processFormData(Array, Array)
    #4 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Hybrid.php(163): ExtendedForm->compile()
    #5 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(74): Hybrid->generate()
    #6 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(511): Form->generate()
    #7 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(194): Controller->getContentElement('12')
    #8 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Module.php(140): ModuleArticle->compile()
    #9 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(71): Module->generate()
    #10 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(443): ModuleArticle->generate(false)
    #11 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(307): Controller->getArticle('12', false, false, 'main')
    #12 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #13 /usr/www/users/facts/_domains_/frauen.de/index.php(266): PageRegular->generate(Object(DB_Mysql_Result))
    #14 /usr/www/users/facts/_domains_/frauen.de/index.php(401): Index->run()
    #15 {main}

    Warningarray_values() [function.array-values]: The argument should be an array in /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php on line 566
    #0 [internal function]: __error(2, 'array_values() ...', '/usr/www/users/...', 566, Array)
    #1 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php(566): array_values(NULL)
    #2 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(442): Database_Statement->set(NULL)
    #3 /usr/www/users/facts/_domains_/frauen.de/system/modules/efg/ExtendedForm.php(575): Form->processFormData(Array, Array)
    #4 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Hybrid.php(163): ExtendedForm->compile()
    #5 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(74): Hybrid->generate()
    #6 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(511): Form->generate()
    #7 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(194): Controller->getContentElement('12')
    #8 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Module.php(140): ModuleArticle->compile()
    #9 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(71): Module->generate()
    #10 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(443): ModuleArticle->generate(false)
    #11 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(307): Controller->getArticle('12', false, false, 'main')
    #12 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #13 /usr/www/users/facts/_domains_/frauen.de/index.php(266): PageRegular->generate(Object(DB_Mysql_Result))
    #14 /usr/www/users/facts/_domains_/frauen.de/index.php(401): Index->run()
    #15 {main}

    Warningimplode() [function.implode]: Invalid arguments passed in /usr/www/users/facts/_domains_/frauen.de/system/libraries/Database.php on line 566
    #0 [internal function]: __error(2, 'implode() [set(NULL)
    #3 /usr/www/users/facts/_domains_/frauen.de/system/modules/efg/ExtendedForm.php(575): Form->processFormData(Array, Array)
    #4 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Hybrid.php(163): ExtendedForm->compile()
    #5 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Form.php(74): Hybrid->generate()
    #6 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(511): Form->generate()
    #7 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(194): Controller->getContentElement('12')
    #8 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/Module.php(140): ModuleArticle->compile()
    #9 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/ModuleArticle.php(71): Module->generate()
    #10 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(443): ModuleArticle->generate(false)
    #11 /usr/www/users/facts/_domains_/frauen.de/system/libraries/Controller.php(307): Controller->getArticle('12', false, false, 'main')
    #12 /usr/www/users/facts/_domains_/frauen.de/system/modules/frontend/PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #13 /usr/www/users/facts/_domains_/frauen.de/index.php(266): PageRegular->generate(Object(DB_Mysql_Result))
    #14 /usr/www/users/facts/_domains_/frauen.de/index.php(401): Index->run()
    #15 {main} 
    Ich hab echt keine Ahnung woran es liegt, ich hab das ganze jetzt schon innerhalb des EFGs aufgerufen als auch in einem gesonderten Ordner in Modules.
    Allerdings gibt es hier keine Veränderung.

    Hat irgendjemand eine Idee?

    DCAconfig.php

    PHP-Code:
    $GLOBALS['TL_HOOKS']['storeFormData'][] = array('RemoveFields''storeFormData'); 

    RemoveFields.php
    PHP-Code:
    <?php 
    class RemoveFields extends Backend 

        public function 
    storeFormData(&$arrSet$objForm
        { 
            unset(
    $arrSet['projekt_yes_no']);
            unset(
    $arrSet['ausland_yes_no']);
            unset(
    $arrSet['ausland_b_yes_no']);
            unset(
    $arrSet['nebenaemter_yes_no']);
            unset(
    $arrSet['netzwerke_yes_no']);
            unset(
    $arrSet['patente_yes_no']);
            unset(
    $arrSet['FORM_SUBMIT']);
            unset(
    $arrSet['REQUEST_TOKEN']);
            unset(
    $arrSet['MAX_FILE_SIZE']);
            unset(
    $arrSet['xt_email_conf']);
            
        } 

    ?>
    Was stimmt hier nicht ?

    Danke!!!
    Contao ist schon was Feines...

  6. #6
    Contao-Nutzer
    Registriert seit
    01.11.2012.
    Ort
    Kiel
    Beiträge
    109

    Standard

    Ist jetzt nur getippt - vielleicht liegt es daran, dass du die Variable $arrSet als Referenz übergibst und direkt bearbeitest?
    Wenn ich den Code von Contao richtig lese (Version 2.11.5 - system/modules/frontend/Form.php), wird die "gehookte" Funktion aufgerufen und die Rückgabe von ihr wiederum als $arrSet gesetzt.

    Klappt es daher so?
    PHP-Code:
    <?php  
    class RemoveFields extends Backend  
    {  
        public function 
    storeFormData($arrSet$objForm)  
        {  
            unset(
    $arrSet['projekt_yes_no']); 
            unset(
    $arrSet['ausland_yes_no']); 
    [...]
            return 
    $arrSet;         
        }  
    }  
    ?>
    Davon abgesehen dürfte unset() so sowieso nicht funktionieren:
    If a variable that is PASSED BY REFERENCE is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called.
    Quelle: http://php.net/manual/en/function.unset.php

  7. #7
    Contao-Fan Avatar von rezico
    Registriert seit
    04.01.2011.
    Ort
    Nürnberg
    Beiträge
    451

    Standard

    Hey,
    auch dir danke.
    Es lag wirklich am Rückgabewert. Ich wusste einfach nicht, dass der fehlt
    Jetzt funktionierts und die Daten werden ordentlich gespeichert.
    Contao ist schon was Feines...

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
  •