Formularfelder über GET-Parameter in der URL vorbelegen
- 3.5
- 4.4
- 4.9
- 4.13
- 5.x
Um GET und POST-Werte in Contao auszulesen können wir das Contao-Framework nutzen.
<?php echo \Input::get('name_get_variable'); ?>
<?php echo \Input::post('name_post_variable'); ?>
Beispiel - Seminartermin übertragen
Nehmen wir an, du bietest Seminare an und möchtest beim Klick auf den Anmelde-Link, das entsprechende Feld im Formular automatisch ausfüllen lassen.
1. PHP-Script anlegen
Zunächst legen wir ein kleines PHP-Script in unserem Templates-Ordner an. Darin legen wir fest, welche Variable wir auslesen wollen. In unserem Fall soll das Feld "seminartermin" heißen.
get_seminartermin.php
<?php echo \Input::get('seminartermin'); ?>
2. Formular anpassen
Damit der Wert im Formular ausgegeben wird, müssen wir das soeben angelegte Script dem Formularfeld zuordnen. Dazu fügen wir mit Hilfe des File-Inserttags die PHP-Datei ein.
Wir tragen also bei unserem Feld "seminartermin" unter Standard-Wert folgendes ein:
{{file::get_seminartermin.php}}
3. Parameter an URL anhängen
Damit nun der Termin an das Formular übertragen wird, müssen wir diesen nun an die URL anhängen.
D.h. unsere Links sollte dann so aussehen:
<a href="zielseite?seminartermin=08.05.2018">
Wenn nun auf diesen Link geklickt wird, dann wird über den GET-Parameter das aktuelle Datum übertragen und beim Formular automatisch ausgefüllt.
Erweiterte Variante mit Parametern
Du möchtest mehrere Formularfelder vorbelegen und nicht jedes Mal eine eigene Datei anlegen? Auch das ist einfach möglich.
Das Prinzip ist ähnlich, allerdings musst du in deinem PHP-Script eine Variable anstelle des konkreten Feldes verwenden.
Wir legen uns dazu z.B. eine neue Datei get_parameters.php mit folgendem Inhalt an:
<?php echo \Input::get(\Input::get('g')); ?>
Standard-Wert vorbelegen

Wollen wir jetzt den Seminartermin (Feld = seminartermin) und den Namen des Seminars (Feld = seminarname) an das Formular übergeben, tragen wir folgende Standardwerte ein:
- Feld "seminartermin": {{file::get_parameters.php?g=seminartermin}}
- Feld "seminarname": {{file::get_parameters.php?g=seminarname}}
Wobei g unsere Variable für das Formularfeld ist.
Unser Link sollte jetzt so aussehen:
<a href="zielseite?seminarname=Contao&seminartermin=08.05.2021">
Vielen Dank an Steffen, der uns auf diese erweiterte Lösung aus dem Contao-Forum aufmerksam gemacht hat.
Empfehlung Videokurs
Eine ausführliche Anleitung mit Schritt für Schritt Video, findest du in diesem Video-Kurs.
Neues Feature für den Contao Core
Da diese Anforderung immer häufiger wurde, gibt es inzwischen ein GitHub-Ticket. Wenn du dieses Feature "Set default values for form fields via URL parameters" im Core haben willst, dann gibt auf GitHub einen Kommentar und Daumen nach oben.
Über den Autor

Christian Feneberg ist der Gründer der Contao-Academy und erstellt seit 2010 Websites mit Contao. Außerdem ist er im Team von trakked.io. und regelmäßig auf YouTube in der Contao Show zu sehen. Neben Contao begeistert er sich für Online-Marketing, Unternehmertum und Persönlichkeitsentwicklung.
7 Kommentare
Daniel |
Danke für die einfach Anleitung – das geht prima für einfache Datenübergaben. Cool wäre noch gleich ein JS dass die Felder dann auf readonly setzt … was empfiehlst du?
Hallo Daniel,
es kommt darauf an, ob du das Feld auch manuell füllen willst.
Wenn du das Formular nur mit Parameter aufrufst, dann könntest du das Feld bereits im Template auf "readonly" setzen.
Oder du machst es per Javascript. Eine wirkliche Empfehlung kann ich dir da nicht geben.
Rene |
Interessant wäre noch die Möglichkeit ein Select vorzubelegen also auf selected zu setzen.
<a href="zielseite?seminartermin=B">
<select name="seminartermin">
<option value="A">Seminartermin A</option>
<option value="B">Seminartermin B</option>
<option value="C">Seminartermin C</option>
</select>
Hallo Rene,
das lässt sich am besten mit ein wenig Javascript lösen.
Ich kann dazu gerne mal ein Beispiel erstellen.
Philippe |
Lieber Christian,
Ich hätte das selbe Anliegen wie Rene und müsste ein select vorbelegen. Könntest du so freundlich sein tatsächlich mal ein Beispiel zu erstellen?
Danke und schöne Grüße
Hallo Philippe, ich hab es mir notiert. Wird allerdings noch bist Oktober dauern.
Gerold |
Da ich in einem alten Contao gerade kein Inputvar zur Verfügung hatte, brachte dieser Beitrag schnell die Lösung! Danke!
Danke für dein Feedback. Freut mich, wenn ich helfen konnte.
Christian Michael |
Danke Christian für die gute Anleitung, ich schlage das immer wieder gerne hier nach ;-) ...
Wichtig ist noch, dass das PHP-Script direkt im Ordner /templates liegen muss - in einem Unterordner wie beispielsweise /templates/subfolder kommt sonst nichts im Feld an.
Hallo Christian,
wenn du einen Unterordner nutzten willst, dann musst du das dazusätzlich mit angeben. Also {{file::unterordner/dateiname.php}}
Steffen |
Das ganze lässt sich noch ausbauen, damit man verschiedene Parameter übergeben kann. Zusätzlicher Bonus: Mit einer universell verwendbaren Variante muss man nicht für jeden Parameter ein eigenes Template anlegen.
So übergibt bei mir die URL sowohl den Kurs, als auch den Termin:
meinedomain.de/kursanmeldung.html?kurs=Yoga%201&date=07.04.-11.04.2021
Damit das funktioniert, wird an input::get kein fester Wert wie im den obigen Beispiel übergeben, sondern eine Variable ('g'). Das sieht in meinem PHP-Template myGetVar.php so aus:
<?php echo \Input::get(\Input::get('g')); ?>
Jetzt kann ich beim Aufruf dem Skript beliebige Parameter übergeben oder die verschiedenen Werte des GET getrennt ansprechen. Das funktioniert z.B. aus einem Elementtyp "Text" heraus. Will ich das Datum (bei mir als "date" in der URL übergeben) aus meinen GET-Parametern einfügen, schreibe ich in den Text:
{{file::myGetVar.php?g=date}}
Damit wird an mein Skript der Parameter "date" übergeben, woraufhin mir das Contao Framework den entsprechende Wert für "date" zurück gibt.
Disclaimer: Das ist nicht auf meinem Mist gewachsen, sondern stammt vermutlich aus den Tiefen des Contao Forums (zu lange her, um die Quelle noch zu wissen). Danke an die ursprünglichen Tipp-Geber.
Hjue Fricke |
Ich hab das über einen InsertTag gelöst. Ab 4.9 geht das schön einfach über den Hook "replaceInsertTags".
Hier ein Beispiel, bei dem einzelne Felder eines Kurses (GhCoursesModel) abgefragt werden:
PS: Danke Christian für Deine vielen Tipps.
Hallo Hjue, vielen Dank für dein Codebeispiel.
Einen Kommentar schreiben