Ergebnis 1 bis 16 von 16

Thema: Frontend-Formular: Daten speichern?

  1. #1
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Frage Frontend-Formular: Daten speichern?

    Hallo liebe Community,

    hat jemand einen Tutoriallink oder kann mir kurz erklären, wie ich über ein Formular in einem FE-Extension-Template Daten in der Datenbank speichere? Bin ja dazu geneigt es in der Compile-Funktion per $_GET - Abfrage zu machen, habe aber den leisen Verdacht das ist ziemlich unsauber und sollte nicht so sein.

    Bin für jede Hilfe Dankbar.

    Vg

  2. #2
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Du kannst in der compile-Methode über $ this->Input->get(VARIABLENNAME) bzw. \Input::get(VARIABLENNAHME) daruf zugreifen. Dann hast Du die Werte und kannst sie speichern.

    Viele Grüße,
    eS_IT

    Gesendet mit Tapatalk 2.
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  3. #3
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Standard

    Hallo,

    danke für deine Antwort. Wenn ich jetzt im entsprechenden Modul debugge während ich das Formular absende, ist die Variable in $_GET (auch über input->get) nicht vorhanden (!isset). Eine Idee woran das liegen kann? Müsste ja durchgereicht werden. :/

    Vg

  4. #4
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Übergibst Du die Daten denn per get oder per post?

    Gesendet mit Tapatalk 2.
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  5. #5
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Standard

    per GET

  6. #6
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Aus Sicherheitsgründen löscht Contao das $_GET - und $_POST-Arrays. Du muss also über das Framework darauf zugreifen. Wenn Du Contao 2.x.x verwesest muss Du mit $this->import('Input'); die Input-Klasse einbinden und dann mit $this->Input->get('test'); auf den Wert des Formularfelds mit dem Name 'test' zugreifen (der Name des Feldes muss beliebig ersetzt werden). Wenn Du Contao 3.x.x verwendest, brauchst Du die Klasse nicht zu importieren, da statisch auf die Methoden zu gegriffen wird: \Input::get('test');

    Wenn es so nicht funktioniert, weiß ich auch nicht weiter, dann liegt der Hase wo anders im Pfeffer.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  7. #7
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Standard

    Ich verwende Contao 3.1.1. und sende das GET-Formular im FE-Template ab. Im nächsten Schritt versuche ich in der Compile-Methode des Event-Reader-Modules (die nach Absenden des Formulars durchlaufen wird) auf die GET-Variable zuzugreifen, jedoch fehlen hier die Formulardaten gänzlich (Array mit der Formular-ID als Key nicht vorhanden). Werden die GET-Daten schon vorher gelöscht?

    Vg

  8. #8
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von jr1337 Beitrag anzeigen
    Ich verwende Contao 3.1.1. und sende das GET-Formular im FE-Template ab. Im nächsten Schritt versuche ich in der Compile-Methode des Event-Reader-Modules (die nach Absenden des Formulars durchlaufen wird) auf die GET-Variable zuzugreifen, jedoch fehlen hier die Formulardaten gänzlich (Array mit der Formular-ID als Key nicht vorhanden). Werden die GET-Daten schon vorher gelöscht?

    Vg
    Wie gesagt, das $_GET-Array wird bei der Initialisierung von Contao in das Framework eingelesen und dann gelöscht. So wird Manipulation vorgebeugt. Hört sich aber auch etwas schräg an, warum erstellst Du Dir nicht mit dem Formulareditor ein Formular? In der Compile-Methode des Event-Reader-Modules hat die Verarbeitung meistens nichts zu suchen (wenn es nicht einen sehr guten Grund dafür gibt). Ich würde ein kleines Inhaltselement erstellen, mit oder ohne Ausgabe, dass die Verarbeitung der Formulardata übernimmt. Man könnte auch mit dem processFormData arbeiten. Das kommt auf das Vorhaben an.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  9. #9
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Standard

    Ein Formular halte ich nicht für möglich, da die Anzeige selbigens an gewisse Bedingungen geknüpft sind (nicht jedes Event hat ein solches Formular anzuzeigen und auch nicht jedesmal soll extra ein solches Formular eingebunden werden müssen).

    Wenn ich es jetzt per POST mache ändert das auch nichts daran oder? Habe in der config das hier gesetzt:

    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('ModuleEventReader''bookingProcess'); 
    Was genau mache ich falsch? Ehrlich gesagt ist es mir nicht so wichtig das es da ist wo es hingehört, ich brauche eine schnelle (und updatefähige) Lösung für das Problem.

    Hintergrund: Der Moderator soll später für ein Event im BA nur per Haken bestimmen ob ein Event reservierbar ist oder nicht, nicht extra noch jedesmal ein Formular hinzufügen müssen. Haken existiert und die bedingte Ausgabe des Formulars im FE läuft auch. Nur das Erfassen der gesendeten Daten (POST oder GET) klappt leider nicht.

    Vg

  10. #10
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Standard

    Was ich nicht verstehe:

    in der Datei "ModuleNewsletterReader" fragt er in der generate()-Methode $_GET auf Inhalte ab. Wieso scheint das dort zu klappen, nicht jedoch in meinem EventReader-Modul? Da muss doch irgendwo noch irgendwas gesetzt sein?

    Liese sich das nicht genauso lösen? Wo muss ich denn ansetzen um die POST Daten zu erhalten?

    Vg

  11. #11
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von jr1337 Beitrag anzeigen
    Ein Formular halte ich nicht für möglich, da die Anzeige selbigens an gewisse Bedingungen geknüpft sind (nicht jedes Event hat ein solches Formular anzuzeigen und auch nicht jedesmal soll extra ein solches Formular eingebunden werden müssen).
    Verstehe ich, gehen tut es schon, ist aber zugegebenermaßen unpraktisch.

    Zitat Zitat von jr1337 Beitrag anzeigen
    Wenn ich es jetzt per POST mache ändert das auch nichts daran oder?
    Vermutlich nicht, ich denke das Problem ist genereller Natur.

    Zitat Zitat von jr1337 Beitrag anzeigen
    Habe in der config das hier gesetzt:

    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('ModuleEventReader''bookingProcess'); 
    Was genau mache ich falsch?
    Sieht gut aus, Du muss eine Klasse ModuleEventReader mit der Methode bookingProcess erstellen. Diese wird dann wie bei dem Link aus dem letzten Post beschrieben, aufgerufen und kann die Daten verarbeiten. Ich denke, dies ist die sinnvollste Lösung für Dein Vorhaben.

    Zitat Zitat von jr1337 Beitrag anzeigen
    Ehrlich gesagt ist es mir nicht so wichtig das es da ist wo es hingehört, ich brauche eine schnelle (und updatefähige) Lösung für das Problem.
    Das ist ja der Sinn, davon es an die richtige stelle zu packen.

    Zitat Zitat von jr1337 Beitrag anzeigen
    Hintergrund: Der Moderator soll später für ein Event im BA nur per Haken bestimmen ob ein Event reservierbar ist oder nicht, nicht extra noch jedesmal ein Formular hinzufügen müssen. Haken existiert und die bedingte Ausgabe des Formulars im FE läuft auch. Nur das Erfassen der gesendeten Daten (POST oder GET) klappt leider nicht.
    Hat den Formular auch die versteckten Felder, die ein Contao-Formular braucht, z.B. FORM_SUBMIT und REQUEST_TOKEN. Ohne diese wird es nicht funktionieren. In Deiner Methode musst Du dann prüfen, ob es sich um Dein Formular handelt. Dies tust Du durch prüfen des Werts in FORM_SUBMIT.

    Viel Erfolg und viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  12. #12
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Beitrag

    Hi erstmal Danke für deine Umfassende Rückmeldung!

    Die Sache mit den versteckten Formularfeldern ist mir ja ganz neu!!! Steht auch nicht in der mir vorliegenden Doku

    Aber danke, diese habe ich nun hinzugefügt. Die Klasse "ModuleEventReader" gibt es ja schon ("system/modules/calendar/modules/ModuleEventReader.php")

    ist das dort richtig? Die Funktion "bookingProcess" habe ich erstellt, leider noch immer keine POST-Variable

    Ein Breakpoint in der bookingProcess-Methode wird aber auch nicht durchlaufen, d. h. sie wird nicht aufgerufen.

    ---

    Also nochmal zusammengefasst was ich gemacht habe:

    system/modules/core/config/config.php:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('ModuleEventReader''bookingProcess');  //wird aufgerufen - jedoch kein Fn-Aufruf "bookingProcess" 

    system/modules/calendar/modules/ModuleEventReader.php:
    PHP-Code:
    public function generate() {
      \
    Input::setPost('bookingArr', \Input::post('booking')); //nach Aufruf immer noch kein $_POST
    }

    public function 
    bookingProcess($arrPost$arrForm$arrFiles) {
       echo 
    'foo';  //wird nicht aufgerufen

    system/modules/calendar/templates/modules/mod_event.html5:
    PHP-Code:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="booking" class="form" method="POST">
    <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId?>">
    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
    ...  // Zusätliche Input-Felder
    </form>

  13. #13
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von jr1337 Beitrag anzeigen
    Hi erstmal Danke für deine Umfassende Rückmeldung!

    Die Sache mit den versteckten Formularfeldern ist mir ja ganz neu!!! Steht auch nicht in der mir vorliegenden Doku

    Aber danke, diese habe ich nun hinzugefügt. Die Klasse "ModuleEventReader" gibt es ja schon ("system/modules/calendar/modules/ModuleEventReader.php")

    ist das dort richtig? Die Funktion "bookingProcess" habe ich erstellt, leider noch immer keine POST-Variable

    Ein Breakpoint in der bookingProcess-Methode wird aber auch nicht durchlaufen, d. h. sie wird nicht aufgerufen.

    ---

    Also nochmal zusammengefasst was ich gemacht habe:

    system/modules/core/config/config.php:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('ModuleEventReader''bookingProcess');  //wird aufgerufen - jedoch kein Fn-Aufruf "bookingProcess" 

    system/modules/calendar/modules/ModuleEventReader.php:
    PHP-Code:
    public function generate() {
      \
    Input::setPost('bookingArr', \Input::post('booking')); //nach Aufruf immer noch kein $_POST
    }

    public function 
    bookingProcess($arrPost$arrForm$arrFiles) {
       echo 
    'foo';  //wird nicht aufgerufen

    system/modules/calendar/templates/modules/mod_event.html5:
    PHP-Code:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="booking" class="form" method="POST">
    <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId?>">
    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
    ...  // Zusätliche Input-Felder
    </form>
    So ist ein nicht updatesicher. Dies stellt genau den Weg dar, den man unter keinen Umständen gehen will! Du solltest auf jeden Fall eine eigene Klasse in einem eigenen Ordner unter TL_ROOT/system/modules/ angelgen.
    In keinem Fall, solltest Du die Core-Dateien verändern!
    Sorry, wenn ich es ganz offen sage: lass es lieber jemanden machen, der sich damit auskennt. Spätestens beim nächsten Update fliegt es Dir um die Ohren! Wenn Du es unbedingt selber machen willst, solltest Du Dir die Videos von Tristan ansehen.

    Viele Grüße,
    eS_IT

    P.S.: Sorry, wenn ich zu ehrlich bin.
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  14. #14
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Standard

    Danke für deine Antwort!

    Ja du hast recht ich habe wirklich zu wenig Ahnung davon, leider gibt es niemanden der mehr Ahnung hat und das ganze läuft unter Zeitdruck..

    Wo soll der TL_HOOK denn dann gesetzt werden, wenn nicht in der core-config?

    Vg

  15. #15
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von jr1337 Beitrag anzeigen
    Danke für deine Antwort!

    Ja du hast recht ich habe wirklich zu wenig Ahnung davon, leider gibt es niemanden der mehr Ahnung hat und das ganze läuft unter Zeitdruck..
    Zeitdruck ist nie schön, aber so wird es nicht funktionieren, egal wie groß der Druck ist.

    Ich könnte Dir schon helfen. Leider muss ich davon leben, da ich es beruflich mache und kann es nicht umsonst anbieten. Wenn Du Interesse, schicke mir einfach eine PM, dann mache ich Dir ein Angebot.

    Zitat Zitat von jr1337 Beitrag anzeigen
    Wo soll der TL_HOOK denn dann gesetzt werden, wenn nicht in der core-config?

    Vg
    Du musst einen eigenen Ordner in TL_ROOT/system/modules/ anlegen. Dort kommen alle Deine Änderungen rein.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  16. #16
    Contao-Nutzer
    Registriert seit
    23.07.2013.
    Beiträge
    75

    Standard

    Finally got it working now..

    Danke! =)
    Geändert von jr1337 (12.08.2013 um 11:02 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
  •