Ergebnis 1 bis 12 von 12

Thema: Radiobutton -> per processFormData auswerten

  1. #1
    Contao-Nutzer
    Registriert seit
    23.06.2009.
    Beiträge
    82

    Standard Radiobutton -> per processFormData auswerten

    Hallo,

    ich habe ein Fromular mit zwei Radiobuttons. Je nach Auswahl soll nach Absenden des Formulars eine unterschiedliche Seite gezeigt werden.

    Eigentlich dachte ich mir das so:

    Auf einer Zielseite binde ich ein php-Script ein, dass die post-Variablen untersucht und dann einen entsprechenden Artikel lädt. Das Problem ist, dass durch {{file:file.php}} die Inserttags im file.php nicht mehr geparst werden und somit mein {{insert_content::1234}} nicht funktioniert.

    Kann mich bitte jemand auf die richtige Fährte bringen. Wie z.B. kann ich per php den Inhalt eines Contentelementes laden?

    Eine weitere Möglichkeite wäre wohl, die Verarbeitung des Formulars per Hook abzufangen und dann auf die entsprechende Seite weiterzuleiten. Das wäre mir eigentlich lieber, doch da bräuchte ich auch kurz ne mini Einweisung. Hab leider mein contao-Buch zu Hause liegen, das würde helfen.....

    Danke
    Geändert von mikado (19.07.2012 um 14:45 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    23.06.2009.
    Beiträge
    82

    Standard

    Gut. Nun bin ich soweit, dass ich mir mit einem Hook helfen will:

    1. system/modules/formRbtnRedirect Ordner angelegt
    Darin config/config.php und /FormRbtnRedirect.php

    2. config.php
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('FormRbtnRedirect''formRedirect');
    ?>
    3. FormRbtnRedirect.php
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');

    class 
    FormRbtnRedirect extends Frontend
    {    
        public function 
    formRedirect($arrSubmitted$arrForm$arrFiles)
        {        
            
    // Restrict action to a spezific form
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'specialForm')
            {
                
                 
    // Handle Form            
            
    }
            return 
    $arrSubmitted;
        }    
    }

    ?>
    Soweit so gut. Der Hook funktioniert. D.h. die Verarbeitung des Formulars wird abgefangen, die Mail wird versandt, DOCH dann kommt eine weiße Seite. Der originale Redirect ist entfallen. Dazu ein paar Fragen:

    1. Wie kann ich in der Funktion festlegen, dass alle Formulare != specialForm regulär bearbeitet werden sollen?

    2. Wie lautet die Syntax für einen Redirect zu einer speziellen Seite?

    Ich glaub, wenn die beiden Fragen geklärt sind, sollte es schon funktionieren.


    Besten Dank....

  3. #3
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Hallo mikado,

    1. hast Du meiner Meinung nach doch schon abgefangen mit

    PHP-Code:
    if ($arrSubmitted['FORM_SUBMIT'] == 'specialForm'
    2. einen Redirect kannst Du mit $this->redirect('relativer/pfad/zur/seite.html') auslösen. Eine weitere Möglichkeit wäre noch ein $this->jumpToOrReload(), die Methode erwartet allerdings die gesamte Datenbankzeile einer Seite als Parameter.

    Übrigens: Auch in Dateien, die mit {{file::xyz.php}} eingebunden wurden, kannst Du Inserttags nutzen:

    PHP-Code:
    <?php $this->redirect($this->replaceInsertTags('{{link_url::4}}')); ?>
    Der obere Code führt einen Redirect zur Seite mit der ID 4 durch.

    Und noch etwas: Der Hook processFormData erwartet keinen Rückgabewert, Du kannst das return also entfernen, es wird nicht ausgewertet.
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  4. #4
    Contao-Nutzer
    Registriert seit
    23.06.2009.
    Beiträge
    82

    Standard

    Ah habe meinen Fehler gefunden.

    Folgendes passierte:
    Formular abgeschickt. Mail wurde versandt. Seite blieb weiß.

    Lösung:
    Fehler angeschaut:
    "Warning: Cannot modify header information - headers already sent by ...."

    => In meinen Moduldateien alle überflüssigen Leerzeichen entfernt.

  5. #5
    Contao-Nutzer
    Registriert seit
    23.06.2009.
    Beiträge
    82

    Standard arrForm verändern

    Hallo,

    nochmal ne Frage:

    1. Das Redirect führt leider zu keinem Ergebnis, auch wenn ich dieses außerhalb der If-Abfrage setze. Das originale Weiterleitungsziel bleibt bestehen.

    2. So dacht ich mir, dass $arrForm zu verändern. Hab mir mit var_dump() das arrForm ausgegeben und die Variable jumpTo identifiziert.
    Wenn ich diese nun zur ID meiner neuen Weiterleitungsseite setze passiert auch nichts. Das mir aber eigentlich logisch, denn das Array arrForm hat doch seinen Scope nur innerhalb meiner Funktion. Wie gebe ich das Array arrForm zurück, bzw. manipuliere es, so dass es von der eigentlichen Formularbearbeitung genutzt wird?


    PHP-Code:
    class FormRbtnRedirect extends Frontend
    {
        public function 
    formRedirect($arrSubmitted$arrForm$arrFiles)
        {
            
    // Restrict action to a spezific form
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'specialForm')
            {
            
    $arrForm['jumpTo'] = "92";
                  
    //this->redirect('/neue-Seite.html');
            
    }
                 
    $arrForm['jumpTo'] = "92";
            
            
    // tmp debugging output
               //var_dump($arrForm);
            
            //return $arrSubmitted;
        
    }
    }
    ?> 
    Danke Danke

  6. #6
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Probier's mal mit

    PHP-Code:
    $this->jumpTo 92
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  7. #7
    Contao-Nutzer
    Registriert seit
    23.06.2009.
    Beiträge
    82

    Standard

    @webster: vielen Dank für die Hilfe. Sehr kompetent. Würde mich gern mal revanchieren. Bauchst du Extensions und gibst sie andernen Contaonutzer frei? Da würde ich glatt mal was spenden.
    Oder wenn du in Sachsen respektive Dresden wohnst, könnte ich dir gern mal nen Gefallen tun.

    Grüße Robert

    P.S. So halb im Urlaub und noch nicht dazu gekommen es auszuprobieren!

  8. #8
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Danke für die Blumen Brauchst Dich nicht revanchieren. Ich habe hier im Forum schon so oft Hilfe bekommen, da freue ich mich, selber auch helfen zu können.
    Ich schreibe zwar Extensions, aber hauptsächlich spezielle Anpassungen für Kunden. Diese sind dann oft nicht für den Allgemeingebrauch geeignet bzw. müssten zu sehr angepasst werden und dafür habe ich dann keine Zeit
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  9. #9
    Contao-Nutzer
    Registriert seit
    23.06.2009.
    Beiträge
    82

    Standard

    Nun gut. Dann sei dir nochmal ausdrücklich gedankt.

    Inzwischen habe ich herausgefunden, wieso meine redirect-Änderungen ($arrForm-Manipulation) erfolglos waren. Meine Funktion lautet
    PHP-Code:
    public function formRedirect($arrSubmitted$arrForm$arrFiles)
        { ... } 
    Alle Veränderungen des $arrForm sind aber nur im Scope der Funktion von Bedeutung. Referenziert man aber das $arrForm auf das Original &$arrForm klappt es. Danke

  10. #10
    Contao-Nutzer
    Registriert seit
    23.06.2009.
    Beiträge
    82

    Standard

    Für alle, die es interessiert: Ich habe mir das $this->Input mal ausgegeben und formatiert. Sieht dann so aus, die Formulardaten sind natürlich aus meinem Formular und weichen bei Euch ab.

    PHP-Code:
    object(Input)#3 (1) 
        
    { ["arrCache:protected"]=> array(4
            { [
    "postEncoded"]=> array(4
                {     
                    [
    "language"]=> string(0"" 
                    
    ["FORM_SUBMIT"]=> string(14"auto_specialForm" 
                    
    ["c68b7427a309b8e04fc091e1c27317dbc"]=> string(2"10" 
                    
    ["name"]=> string(9"roberTest" 
              [
    "cookieEncoded"]=> array(4
                  {     
                    [
    "FE_USER_AUTH"]=> string(0"" 
                    
    ["FE_PREVIEW"]=> string(0"" 
                    
    ["tl_recall_fe"]=> string(0"" 
                    
    ["BE_USER_AUTH"]=> string(40"404dcea0ceacaf0431b52bd134cf59f435bbf54b" 
              [
    "getEncoded"]=> array(2
                  {     
                    [
    "articles"]=> string(0"" 
                    
    ["pdf"]=> string(0"" 
              [
    "postDecoded"]=> array(16
                  {     
                    [
    "product"]=> string(1"1" 
                    
    ["payment"]=> string(6"paypal" 
                    
    ["Anrede"]=> string(4"Herr" 
                    
    ["name"]=> string(9"roberTest" 
                    
    ["Vorname"]=> string(9"kTest" 
                    
    ["email"]=> string(22"robert.k@123.de" 
                    
    ["company"]=> string(0"" 
                    
    ["street"]=> string(2"df" 
                    
    ["zip"]=> string(3"342" 
                    
    ["city"]=> string(3"dsg" 
                    
    ["land"]=> string(0"" 
                    
    ["phone"]=> string(6"324534" 
                    
    ["message"]=> string(0"" 
                    
    ["FORM_SUBMIT"]=> string(14"auto_specialForm" 
                    
    ["MAX_FILE_SIZE"]=> string(7"2048000" 
                    
    ["c68b7427a309b8e04fc091e1c27317dbc"]=> string(2"10" } } } 

  11. #11
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.826
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo,
    ich häng mich mal hier dran.
    Ich möchte abhängig von ausgewählten Radiobutton, die E-Mail an verschiedene Empfänger verschicken. Mit Anleihen aus Leos Contao-Buch habe ich den Hook auch soweit, dass er prinzipiell funktioniert.
    Jetzt habe ich noch das Problem, dass in der Mail auch FORM_SUBMIT, REQUEST_TOKEN und MAX_FILE_SIZE mit gesendet wird, was ja bei normalem Mailversand nicht passiert. Leider habe ich mit meinen rudimentären PHP-Kenntnissen, die Stelle nicht gefunden an der ich dafür schrauben muss.
    Außerdem möchte ich sicher sein, dass ich mit meinem Hook nicht die Sicherheit ausheble (kein HTML in Formulareingaben).

    Ich benutze Contao 2.11.4

    Hier mein Code. Wäre nett wenn mir jemand auf die Sprünge helfen kann.

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');


    class 
    kontaktformDyn extends Frontend
    {

        
    /**
         * Process form data
         * @param array
         * @param array
         * @param array
         * @param array
         */
         
        
    public function myProcessFormData($arrData$arrForm$arrFiles$arrLabels)
        {
            
    //Das Service-Formular hat die ID 2
            
    if ($arrForm['id'] != 2)
            {
            return;
            }
            
    $this->import('String');
            foreach (
    $arrData as $k=>$v)
            {
                
    // Add field to message
                
    $message .= (isset($arrLabels[$k]) ? $arrLabels[$k] : ucfirst($k)) . ': ' . (is_array($v) ? implode(', '$v) : $v) . "\n";
            }

            
    $email = new Email();

            
    $email->from 'website@beispiel.de';
            
    $email->fromName 'Website';
            
    $email->subject "Neue Anfrage von der Website";

            
    // Send e-mail
            
    $email->text "Eine neue Anfrage von der Website ist eingegangen.\n\n" $this->String->decodeEntities(trim($message)) . "\n\n";
            
            
    // E-Mail abhängig von der Kategorie versenden
            
    if ($arrData['category'] == 'Frachtanfrage')
            
            {
                
    $email->sendTo('mail1@beispiel.de');
            }
            elseif (
    $arrData['category'] == 'Bewerbung')
            {
                
    $email->sendTo('mail2@beispiel.de');
            }
            else
            {
                
    $email->sendTo('mail3@beispiel.de');
            }         
        }
    }

    ?>
    Danke

    Maren

  12. #12
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.826
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo,
    habe das Problem für mich gelöst. Es geht sicher eleganter, aber es funktioniert erst mal. Für elegantere Lösungen bin ich offen.

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');


    class 
    kontaktformDyn extends Frontend
    {

        
    /**
         * Process form data
         * @param array
         * @param array
         * @param array
         */
         
        
    public function myProcessFormData($arrSubmitted$arrForm$arrFiles)
        {
            
    //Das Service-Formular hat die ID 2
            
    if ($arrForm['id'] != 2)
            {
            return;
            }
            
    $this->import('String');
            
            
    $message '';
            
            
    // Mailinhalt aufbereiten
            
            
    foreach ($arrSubmitted as $k=>$v)
                {
                    if ((
    $k == 'FORM_SUBMIT') || ($k == 'REQUEST_TOKEN') || ($k == 'MAX_FILE_SIZE') || ($k == 'category'))
                    {
                        continue;
                    }


                    
    // Message aufbauen
                    
    $message .= ucfirst($k) . ': ' .  $v "\n";

                    
                }
            
    //neue Mail
            
    $email = new Email();
            
    //Website als Absender der Mail
            
    $email->from 'website@beispiel.de';
            
    $email->fromName 'Website';
            
    // Betreffzeile
            
            
    $email->subject=$arrSubmitted['category'] . " über die Webseite";

            
    // Send e-mail
            
    $email->text "Eine neue " $arrSubmitted['category'] . " über die Website ist eingegangen.\n\n" $this->String->decodeEntities(trim($message)) . "\n\n";
            
            
    // E-Mail abhängig von der Kategorie versenden
            
    if ($arrSubmitted['category'] == 'Frachtanfrage')
            
            {
                
    $email->sendTo('mail1@beispiel.de');
            }
            elseif (
    $arrSubmitted['category'] == 'Bewerbung')
            {
                
    $email->sendTo('mail2@beispiel.de');
            }
            else
            {
                
    $email->sendTo('mail3@beispiel.de');
            }         
        }
    }
    Wenn ich es richtig verstanden und getestet habe, wird von Contao bei den Formulareingaben auf jeden Fall Schadcode abgefangen, wenn ich den Hook nutze. Falls ich das falsch sehe, klärt mich bitte auf.

    Schönen Tag noch

    Maren

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
  •