Ergebnis 1 bis 19 von 19

Thema: Formular per POST an PHP-Script

  1. #1
    Contao-Nutzer
    Registriert seit
    12.02.2010.
    Ort
    Berlin
    Beiträge
    56

    Standard Formular per POST an PHP-Script

    Hallo,

    klingt ganz simpel, kriegs aber nicht hin:

    ich möchte mit einem Formular in der linken Spalte per POST an eigenes PHP-Script senden.
    Das Ergebnis soll in der Hauptspalte erscheinen (Formular bleibt links).

    Freue mich über jeden Tipp!

    Viele Grüße
    Volker

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

    Standard

    Binde einfach Dein PHP-Skript mit dem Inserttag {{file::filename.php}} auf der Seite ein, wo die Daten verarbeitet werden sollen. In Deinem Skript hast Du dann mit
    PHP-Code:
    $this->Input->post('feldname'
    Zugriff auf die (bereits von Schadcode entwerteten) Daten des Formulars.
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  3. #3
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Und zur Info:
    filename.php muss im Verzeichnis /templates liegen. Trotzdem muss der InsertTag "nur" {{file::filename.php}} lauten.

  4. #4
    Contao-Nutzer
    Registriert seit
    12.02.2010.
    Ort
    Berlin
    Beiträge
    56

    Standard

    Danke Euch für die schnelle Antwort.
    Hatte ich mir auch schon so gedacht und gerade nochmal ausprobiert.

    das Problem ist, dass ich per POST nicht ins templates-Verzeichnis durchkomme, andererseits aber keine tl_files per Inserttag einbinden kann.

    Es kommt die gelbe Box:

    Invalid request token!
    The request token could not be verified. Please go back and try again.
    This error occurres if there is a POST request without a valid authentication token. In Contao 2.10, the referer check has been replaced with a request token system. If the problem persists, you are maybe using an incompatible third-party extension or have not correctly updated your Contao installation.

    Wie bekomme ich das valid authentication token ?

    (1:0 für Griechenland)
    Geändert von VolkerS (16.06.2012 um 22:01 Uhr)

  5. #5
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Dein Formular sollte noch folgendes Hidden-Feld beinhalten:
    Code:
    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
    Aus Sicherheitsgründen.

  6. #6
    Contao-Nutzer
    Registriert seit
    12.02.2010.
    Ort
    Berlin
    Beiträge
    56

    Standard

    ich bin hellauf begeistert !!!!

    Danke, besonders für den letzten entscheidenden Tipp!

  7. #7
    Contao-Nutzer
    Registriert seit
    07.07.2012.
    Beiträge
    10

    Standard

    Entschuldigt, dass ich dieses Thema wieder aufgreife aber bei mir wird das PHP-Script bereits beim aufrufen des Formulares aufgerufen. Wie kann ich dies verhindern, sprich dass es erst beim absenden des Formulares aufgerufen wird?
    Liebe Grüsse
    LukiLeu

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

    Standard

    Platziere das Script auf der Seite zu der vom Formular aus weitergeleitet wird. Zeigt das Formular auf die gleich Seite, auf der es selbst untergebracht ist, so musst Du natürlich eine Abfrage zur Überprüfung der POST-Daten einbauen. Das sollte generell passieren, um Fehler zu vermeiden.

    In etwa so (rudimentär):

    PHP-Code:
    <?php
    if (strlen($this->Input->post('meinFeld')))
    {
      
    // verarbeite Daten
    }
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  9. #9
    Contao-Nutzer
    Registriert seit
    07.07.2012.
    Beiträge
    10

    Standard

    Hallo
    Wie kann ich die Variable $this->Input->post('meinFeld') wieder leeren, sodass sie keinen Wert mehr enthält?
    Mir lieben Grüssen
    LukiLeu

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

    Standard

    z.B. durch einen Reload der Seite ($this->jumpToOrReload()).
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  11. #11
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von LukiLeu Beitrag anzeigen
    Wie kann ich die Variable $this->Input->post('meinFeld') wieder leeren, sodass sie keinen Wert mehr enthält?
    Hallo

    Dieser Eintrag ist zwar schon etwas älter aber ich habe eine ähnliches Problem. Ich habe auf meiner Seite ein Formular eingefügt, jedoch werden die Daten nicht an eine E-Mail-Adresse geschickt. Den E-Mail-Versand möchte ich selbst in meiner PHP Datei vornehmen.

    Ich habe es jetzt auch mit $this->Input->post('meinFeld'); gelöst. Klappt auch gut. Aber diese Post-Variable bleibt irgendwie immer bestehen. Sprich, wenn der Besucher die Seite neu lädt oder wieder auf die Seite zurückkehrt, wird das Mail erneut abgesendet, was natürlich für den Empfänger mühsam ist...

    Ich habe die Überprüfung, ob das Formular abgesendet wurde via Feld Mail-Adresse gemacht. Kann man da etwas anderes, eindeutig, einmaliges überprüfen? Falls nicht, kann man die POST-Werte irgendwie löschen?

    $this->jumpToOrReload() klappt leider nicht (Contao 2.11.11)


    Danke und Gruss
    Marco

  12. #12
    Contao-Nutzer Avatar von claus
    Registriert seit
    30.07.2014.
    Ort
    Dresden
    Beiträge
    233

    Standard $this->Input->post('meinFeld') wieder leeren

    Jahre her und trotzdem gleiche Frage... sorry, ich habe mir echt einige Themen im Forum durchgelesen aber komme nicht weiter.

    User gibt was in ein Formularfeld ein, Eingabe ist ungültig und ich gebe ne Fehlermeldung aus, POST-Variable soll gelöscht werden. Die bleibt aber dummerweise über verschiedene Seitenaufrufe hinweg erhalten.

    Ich wollte die Variable durch folgende Zeile wieder zurück setzen:
    PHP-Code:
    $this->Input->setPost('meinFeld'''
    Allerdings scheint Contao nach Absenden des Formulars einen Redirect zu machen und die Variable wird beim ersten Aufruf gelöscht und nach dem Redirect (da wo ich sie noch brauche) ist sie leer.

    Hat jemand noch eine Idee?
    Geändert von claus (23.09.2015 um 14:41 Uhr)

  13. #13
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Hallo claus

    Willst du denn jetzt die Daten löschen oder auf der nächsten Seite zu Verfügung haben?
    Falls du diverse Daten auf der nächsten Seite brauchst, könntest du die in eine Session speichern.
    Machen kannst du das mit dem processFormData-HOOK. Darin dann die Session setzen. Bsp.

    PHP-Code:
    $this->Session->set('email'$arrPost['email']); 
    Mit der Erweiterung inputvar kannst du dann die Session an einem beliebigen Ort auf deiner Seite ausgeben.

    HTML-Code:
    <p>Ihre E-Mail: {‎{session::email}}</p>
    Gruss
    Marco

  14. #14
    Contao-Nutzer Avatar von claus
    Registriert seit
    30.07.2014.
    Ort
    Dresden
    Beiträge
    233

    Standard

    Danke für die fixe Antwort, Marco.

    Wenn ich das Formular mit Contao (3.4.4) im Formulargenerator erstelle, werden die Werte glaube ich sogar automatisch in die Session gespeichert. Aber das brauche ich eigentlich nicht.

    Was ich mit dem Redirect meine ist eher folgendes:
    Der User gibt etwas ins Formular ein, Formular wird abgesendet mittels post und was ich in den Netzwerkaktivitäten beobachte ist, dass der erste Request an den Server ein POST ist mit dem Status 303 und danach noch ein GET mit Status 200.

    Nun habe ich in einer PHP-Datei die Abfrage nach der Post-Variable
    PHP-Code:
    $meinFeld $this->Input->post('meinFeld');

    if (
    $meinFeld !== '') {

    ... 
    mache Sachen falls der User was eingegeben hat ...

    if ( ... 
    $meinFeld nicht valide ...) {
      
    $msg 'Bitte neu eingeben.';
      
    $this->Input->setPost('meinFeld'''); // Variable "löschen"
    }

    Da durch den Redirect diese PHP-Datei anscheinend doppelt durchlaufen wird, ist die Variable $meinFeld im ersten Aufruf zwar gesetzt aber nicht mehr im zweiten, also wird z.B. auch $msg nicht gesetzt.
    Nun könnte ich z.B. Globale Variablen für die Fehlermeldung usw. setzen oder doch meine Abfragen optimieren.
    Ich frage mcih allerdings, warum $this->Input->post('meinFeld') seitenübergreifend einfach vorhanden bleibt, statt nach dem POST-Request wieder leer zu sein

  15. #15
    Contao-Nutzer Avatar von merlincom
    Registriert seit
    06.07.2015.
    Ort
    Basel (CH)
    Beiträge
    243

    Standard Formularfelder mit Post an neue Seite senden - gelöst

    Hallo Marco und andere Helfende
    Zitat Zitat von marcos Beitrag anzeigen
    Willst du ... auf der nächsten Seite zu Verfügung haben?
    Ich habe im Verzeichnis template die beiden Dateien eingabe.php und ausgabe.php.
    Beide PHP-Dateien habe ich in der Seitenstrukur von Contao korrekt in die Artikel mit den Namen eingabe und ausgabe eingebunden und die Seiten können über [meine-url]/de/eingabe.html und [meine-url]/de/ausgabe.html korrekt aufgerufen werden.

    Von eingabe.html sende ich per POST ein einfaches Formular an ausgabe.html

    eingabe.php
    HTML-Code:
    <form method="post" action"[meine-url]/de/ausgabe.html">
    <input type="text" name="myname" value="Mein Name">
    <input type="hidden" name="REQUEST_TOKEN" value="<?='{{request_token}}'?>"> 
    <input type="submit" name="submit" value="Submit">
    ausgabe.php
    Problem gelöst
    In [meine-url]/de/ausgabe.html möchte ich in der eingebundenen Datei ausgabe.php die gesendeten POST-Daten abfragen
    PHP-Code:
    <?php echo $_POST['myname'] ; ?>
    oder
    PHP-Code:
    <?php echo $this->Input->post('myname') ; ?>
    bringen das gewünschte Resultat

    Marcel
    Geändert von merlincom (07.10.2015 um 12:10 Uhr)

  16. #16
    Contao-Nutzer Avatar von claus
    Registriert seit
    30.07.2014.
    Ort
    Dresden
    Beiträge
    233

    Standard

    überprüfe mal den requesttoken, der müsste so aussehen:
    PHP-Code:
     <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}"

  17. #17
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von claus Beitrag anzeigen
    überprüfe mal den requesttoken, der müsste so aussehen:
    PHP-Code:
     <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}"
    bzw.
    PHP-Code:
     <input type="hidden" name="REQUEST_TOKEN" value="<?php echo $this->replaceInsertTags('{{request_token}}'); ?>">
    wenn das Formular direkt im Template erstellt wird.


    @claus
    Hast du in der Zwischenzeit eine Lösung auf deine Frage von oben gefunden?
    Geändert von marcos (30.09.2015 um 13:56 Uhr)

  18. #18
    Contao-Nutzer Avatar von claus
    Registriert seit
    30.07.2014.
    Ort
    Dresden
    Beiträge
    233

    Standard

    Zitat Zitat von marcos Beitrag anzeigen
    @claus
    Hast du in der Zwischenzeit eine Lösung auf deine Frage von oben gefunden?
    hmmmjein... ich habe das ganze nochmal brav über Hooks probiert statt alles ins Template zu schreiben: validateFormField für den Fall das $meinFeld nicht valide ist und processFormData für die Verarbeitung der Daten. Im Template habe ich dann über ein flag geprüft, ob ich mich im ersten oder zweiten Aufruf befinde und dementsprechend meine Ausgabe gesteuert.
    Das ist für mich aber ehrlich gesagt nicht das gelbe vom Ei

  19. #19
    Contao-Nutzer
    Registriert seit
    16.12.2015.
    Beiträge
    17

    Standard

    @claus
    Vielen Dank für den Tipp, dass Contao die Formulardaten in der Session speichert. Ansonsten wäre ich daran wohl auch verzweifelt.
    Anstatt vergeblich die POST-Variable zu löschen/ändern, ändere ich den entsprechenden Wert im SESSION-Array.

    PHP-Code:
    if (\Input::post('is_submit') === '1') {
        
    $_SESSION['FORM_DATA']['is_submit'] = '0';
        
    // Do something

    PS: Ich würde ja gerne die Session-Klasse von Contao hierzu verwenden, aber damit komme ich wegen der Auswertung von TL_MODE in meinem Fall nur an [FE_DATA] oder [BE_DATA], nicht aber an [FORM_DATA].
    Daher der direkte Zugriff auf $_SESSION.

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
  •