Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: Post-Daten verarbeiten aus einem Contao formular

  1. #1
    Contao-Nutzer
    Registriert seit
    14.11.2019.
    Beiträge
    47

    Standard Post-Daten verarbeiten aus einem Contao formular

    Hallo,

    ich habe ein Contao-Formular angelegt und möchte die Daten in einem eigenen PHP-Script verarbeiten.

    Mein erster Versuch mit {{file::myformprocessor.php::{{post::feld1}}}} hat nicht funktioniert, weil verschachtelte inserttags nicht funktionieren.

    Mein zweiter Versuch mit {{mayformprocessor::{{post::feld1}}}} funktioniert daher ja auch nicht.

    nun bin ich so weit dass ich in myformprocessor mit
    PHP-Code:
    \input::post['feld1'
    die post-Variable abfrage. Dabei stelle ich fest, dass diese Werte in der Session gespeichert werden und daher auch noch gelten, wenn der Benutzer die Seite nochmal ohne das vorgeschaltete Formular aufruft.

    Wie kann ich nach der Verarbeitung dafür sorgen, dass
    PHP-Code:
    \input::post['feld1'
    den Wert nicht nochmal liefert.

  2. #2
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Guck dir mal den
    PrepareFormData Hook an.

    https://docs.contao.org/dev/referenc...epareFormData/

    https://github.com/contao/contao/blo.../Form.php#L304

    Das wäre der saubere Weg, verlangt jedoch etwas Programmierkenntnisse.


    Liebe Grüße

    Marko
    Geändert von markocupic (16.08.2020 um 21:40 Uhr)
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  3. #3
    Contao-Nutzer
    Registriert seit
    14.11.2019.
    Beiträge
    47

    Standard

    Zitat Zitat von markocupic Beitrag anzeigen
    Guck dir mal den
    PrepareFormData Hook an.

    https://docs.contao.org/dev/referenc...epareFormData/

    https://github.com/contao/contao/blo.../Form.php#L304

    Das wäre der saubere Weg, verlangt jedoch etwas Programmierkenntnisse.


    Liebe Grüße

    Marko
    Hallo Marko,

    danke für deine Antwort. Etwas Programmierkenntnisse habe ich schon. Was mir aber fehlt ist ein sicherer Umgang mit Contao api usw. Wir sind unterwegs mit Contao 4.4.9. Es ist eine Multi domainsite. Alles was ich mache, soll begrenzt sein auf eine spezifische Domain - ohne Nebenwirkungen auf die anderen Domains. Daher arbeite ich mit inserttags. Diese installiere ich in einem PHP-File, welche ich in den Seitenlayouts der jeweiligen Domain per "incluce_once" aufrufen (bzw, sogar in content einer einzelnen Seite).

    Ich möchte einen Import anstoßen, bei dem der Benutzer in einem Formular das startdatum und die Anzahl der Tage angibt. In diesem Formular habe ich als Weiterleitungsseite eine Seite angegeben in welcher ein Inserttag steht, das dann den Import ausführt. Ich dachte dazu sind die Weiterletungsseiten da.

    Der Handler für dieses Inserttag liest die Formulardaten mit \Input:ost . Das funktioniert auch hervorragend. Allerdings ist der letzte Post auch noch sichtbar wenn man die URL der Berarbeitungsseite anschließend mit GET nochmal aufruft.

    Ich habe nun ein unset($_SESSION['FORM_DATA']); eingebaut, nachdem ich die Daten gelesen habe. Das scheint zu funktionieren und löst damit zunächst mein Problem.

    Verstehe ich es richtig, dass der "saubere Weg" folgendes wäre:

    1. ich schreibe eine klasse z.b. myctimport.php

    PHP-Code:

    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Form;

    class 
    BwlCtImprter
    {
        public function 
    __invoke(array &$submittedData, array $labels, array $fieldsForm $form): void
        
    {
          
    // ... verarbeite die Felder
        
    }
    }
    $GLOBALS['TL_HOOKS']['prepareFormData'][] = ['App\Eventlistener\BwlCtImporter''__invoke']; 
    2.Da ende ich wieder an der Frage: wo "require" ich myctimport.php? In der Seite, in der ich auch das Formular einbette?

    lg B.

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.882
    Partner-ID
    10107

    Standard

    Zitat Zitat von bwl21 Beitrag anzeigen
    Wir sind unterwegs mit Contao 4.4.9.
    Bist du dir da sicher? Wenn ja, dann solltest du auf jeden Fall auf Contao 4.4.51 aktualisieren.





    Zitat Zitat von bwl21 Beitrag anzeigen
    2.Da ende ich wieder an der Frage: wo "require" ich myctimport.php? In der Seite, in der ich auch das Formular einbette?
    Wie du Hooks korrekt registriert findest du hier: https://docs.contao.org/dev/framework/hooks/

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.681
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von bwl21 Beitrag anzeigen
    Mein erster Versuch mit {{file::myformprocessor.php::{{post::feld1}}}} hat nicht funktioniert
    statt {{file::myformprocessor.php::{{post::feld1}}}}
    mach {{file::myformprocessor.php?param=feld1}}

    in Deiner Datei myformprocessor.php hast Du Zugriff auf den Inhalt von "param" als normale GET-Variable, den übergeben Wert "feld1" kannst Du dann in deinem POST-Array abfragen und weiter verarbeiten...

  6. #6
    Contao-Fan Avatar von Hoch-3
    Registriert seit
    16.11.2010.
    Ort
    Zürich
    Beiträge
    372
    Partner-ID
    7136

    Standard Daten aus Formular in Template ausgeben

    Ich hab eine Radio-Auswahl in einem Formular und möchte den Inhalt davon in einem weiteren Formular auch als gecheckten Radio-Button ausgeben. Und das hier hab ich im Template form-radio versucht:


    HTML-Code:
    <?php if ('option' == $option['type']): ?>
            <span><input type="radio" name="<?= $option['name'] ?>" id="opt_<?= $option['id'] ?>" class="radio" value="<?= $option['value'] ?>"<?= $option['checked'] ?><?= $option['attributes'] ?>[B]<?php if ($option['value'] == "\Input::getInstance()->post['Anrede']"): ?> checked<?php endif; ?>[/B]> <label id="lbl_<?= $option['id'] ?>" for="opt_<?= $option['id'] ?>"><?= $option['label'] ?></label></span>
    <?php endif; ?>
    Wenn ich nach dem == direkt "Herr" reinschreibe klappt es.

    Ich habs nach dem == schon mit und ohne "" mit und ohne getInstance()-> und auch als {{post::Anrede}} und als $_post(Anrede) probiert. Alles hat entweder nichts oder einen Fehler gegeben.

    Kann mir jemand kurz mitteilen, wie die richtige Notation hier geht?


    EDIT: Habs rausgefunden... nach ein paar weiteren Try and Error:
    <?php if ($option['value'] == \Input::getInstance()->post('Anrede')): ?> checked<?php endif; ?>
    Geändert von Hoch-3 (14.11.2022 um 12:13 Uhr)

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
  •