Hallo zusammen,
wir, Stef und JR Cologne, haben uns dazu entschieden, gemeinsam ein paar Tutorials zu verfassen. Für das erste Tutorial haben wir uns überlegt, uns mit der Erstellung eines einfachen Kontaktformulars mit PHP auseinanderzusetzen.
Wir hoffen, euer Interesse wecken zu können und würden uns sehr freuen, wenn wir dem einen oder anderen hiermit ein wenig helfen können.
Anforderungen
Schwierigkeitsgrad: leicht
Kenntnisse: HTML & PHP Basics
Abhängigkeiten: PHPMailer in Version 6
Setup/Einrichtung
Wir starten mit einer kurzen Einrichtung: Für unser Kontaktformular benötigen wir die Mailer-Klasse PHPMailer, welche wir für die Versendung der E-Mail nutzen werden.
Um den PHPMailer nutzen zu können, müssen wir diesen erstmal herunterladen, damit wir die Abhängigkeit dann im Code einbinden können. Auch wenn die Möglichkeit einer Installation über Composer zur Verfügung steht, nutzen wir diese der Einfachheit halber nicht.
Stattdessen laden wir uns die aktuelle Version einfach im Zip-Format von GitHub herunter.
Auf der Übersichtsseite mit allen Releases müssen wir nur die gewünschte Version auswählen und dann den Quellcode des PHPMailers herunterladen. In unserem Beispiel nutzen wir die Version 6.0.3.
Innerhalb unseres Projektordners erstellen wir anschließend einen Ordner für den PHPMailer, sodass unsere Ordnerstruktur ungefähr so aussieht:
php-kontaktformular/
| phpmailer/
| | language/
| | | phpmailer.lang-de.php
| | | ...
| | src/
| | | Exception.php
| | | OAuth.php
| | | PHPMailer.php
| | | POP3.php
| | | SMTP.php
| | get_oauth_token.php
| | LICENSE
| | README.md
| | SECURITY.md
| | VERSION
| datenUeberpruefung.php
| kontaktformular.php
Alles anzeigen
Nur die Dateien datenUeberpruefung.php und kontaktformular.php sind dabei unsere eigenen Dateien. Der Rest kommt vom PHPMailer und sollte möglichst nicht angerührt werden.
So, das wäre es dann auch schon. Wir sind startklar.
Was gibt es allgemein zu beachten?
Bevor wir mit unserem Formular starten, müssen wir erst noch ein paar allgemeine Dinge klären:
Formulardaten können über zwei Kanäle empfangen werden. Über GET und POST. Der Kanal, über den das Formular abgesendet wird, legt man mit dem Attribut method fest. Diesem geben wir entweder post oder get als Wert mit. Für Kontaktformulare sollte immer POST verwendet werden, mehr dazu gleich.
Des Weiteren muss jede Usereingabe als potentiell gefährlich angesehen werden. Ebenso muss man darauf achten, dass man die Formulardaten immer mit der geeigneten Funktion filtern muss, um z.B. XSS-Attacken zu verhindern. Meistens ist das htmlspecialchars().
Unterschied POST/GET
Der wesentliche Unterschied zwischen den beiden Methoden für die Übermittlung von Formulardaten GET und POST ist, dass POST-Daten praktisch verdeckt übermittelt werden und nicht direkt für den User sichtbar sind.
Bei der Methode GET werden die Daten hingegen über die URL übertragen und sind damit in der Adresszeile einsehbar. Dies ist in den meisten Fällen nicht erwünscht, weshalb im Zweifel immer POST verwendet werden sollte.
Lediglich bei Anwendungsfällen, wie z.B. einer Suchfunktion, macht es Sinn, die Daten über den GET-Kanal zu übertragen. Ansonsten sollte man bei Formularen stets die Finger von GET lassen.
Unabhängig von Formularen haben sogenannte GET-Parameter, auch URL-Parameter genannt, zwar noch andere Anwendungsfälle, aber diese sind dann meist abseits von Formularen. Von daher gehen wir darauf jetzt nicht näher ein.
Stattdessen schauen wir uns noch kurz ein Beispiel für die Nutzung der beiden Kanäle an.
Achtung: Die Beispiele sind aufs Wesentliche heruntergebrochen und sollten so nicht verwendet werden.
GET:
<?php
if (isset($_GET['query'])) {
echo 'Du hast nach ' . $_GET['query'] . ' gesucht.';
}
?>
<form action="" method="get">
<input type="text" name="query">
<input type="submit" name="submit" value="Suchen">
</form>
URL: http://example.com/get.php?query=test
POST:
<?php
if (isset($_POST['query'])) {
echo 'Du hast nach ' . $_POST['query'] . ' gesucht.';
}
?>
<form action="" method="post">
<input type="text" name="query">
<input type="submit" name="submit" value="Suchen">
</form>
URL: http://example.com/post.php
Der wesentliche Unterschied ist direkt an der URL zu erkennen. Bei POST findet sich keinerlei Hinweis auf die versendeten Daten, bei GET schon.