Newsletter

  • Immer informiert über die neusten Trends, Webseiten und Tutorials! Einfach hier für den monatlichen Newsletter anmelden.
  •  Eintragen
  •  Austragen

Login

Umfrage

  • Haben Sie Interesse an Softwaretipps für Webmaster?
  •  
  • ja
  • nein
  •  


Linktipps

Anzeige

 

www.finanzcheck.de
» Startseite » PHP und MySQL Tutorials

Kontaktformular mit PHP

Für die eigene Homepage gibt es einige Extras, sicherlich gehört das Kontaktformular zu den beliebtesten. Es ermöglicht eine bequeme Kontaktaufnahme mit dem Betreiber der Website und lässt sich zu dem auch für andere Funktionalitäten leicht umwandeln.

Hier erkläre ich wie man mit PHP und der Funktion mail() ein eigenes Formular erstellen kann. Gebraucht wird dafür mindestens PHP 4 und ein Mailserver, den es allerdings in den meisten Hostingangeboten gibt.

1. Erste Schritte

Am Anfang benötigen wir die HTML Grundlage, also das Aussehen des Formulars, das was der User sehen wird. Zu erst brauchen wir natürlich eine Ausgangsdatei, die ich passend zum Vorhaben „contact.php“ genannt habe. Dann beginnt das eigentliche Coden: Hierzu erstellen wir einfache Eingabefelder mit dem <form>-Tag:

  1.  <form action="contact.php" method="post">
  2.  Deine E-Mailadresse:<br />
  3.  <input type="text" name="email" /><br />
  4.  Deine Nachricht:<br/>
  5.  <textarea name="nachricht" cols="50" rows="5"></textarea></br>
  6.  <input type="submit" value="Absenden" />
  7.  </form>




Der erste Tag
  1.  <form action="contact.php" method="post">
ist das Gerüst des Formulars, mit action wird festgelegt welche Datei die eingegebenen Daten verarbeiten soll. Hier habe ich logischerweise den Namen "contact.php" gewählt, den Namen unserer Datei. Dann wird noch method festgelegt, die Art und Weise wie die Daten übertragen werden. Unter PHP gibt es zwei Optionen, GET und POST. GET gibt die Werte öffentlich ab und speichert sie in der dynamischen URL, so kommen Sachen wie index.php?s=82882 zustande. POST hingegen gibt die Daten anonym weiter und ist für ein Kontaktformular somit die bessere Variante.

Als nächstes bestimmen wir zwei Felder, das erste
  1.  <input type="text" name="email" />
ist ein input-Feld, das wir unter type als text definieren, sodass es beschreibbar ist, dann geben wir ihm den Namen "email". Dieser Name ist später im PHP Teil von Relevanz. Der nächste Tag ist ein textarea-Tag, im Grunde das selbe wie input type="text", aber besser geeignet, da er sich in der Größe definieren lässt, cols steht für Spalten und ist die Breitenbezeichnung, rows die Anzahl der Zeilen. Als Namen habe ich "nachricht" verwendet, weil dies die eigentliche Botschaft sein wird. Zum Schluss benötigen wir noch eine Schaltfläche um die Aktion zu starten. Hierzu nimmt man den input type "submit", unter value legt man zu dem noch die Aufschrift des Buttons fest. Den am Anfang geöffneten form-Tag müssen wir jetzt schließen: </form>

Diese eigentliche Struktur lässt sich beliebig erweitern, wichtig ist nur, dass die verwendeten name-Werte nicht doppelt auftauchen.

2. PHP im Einsatz

Als nächstes werden wir das Formular mit der eigentlichen Funktion erweitern. Dazu benötigen wir im Grunde nur die PHP Funktion mail(), diese definiert sich unter der Struktur mail("Empfängeradresse", "Betreff", "Nachricht", "From: Absenderadresse"); . Theoretisch würde es also reichen folgenden Code zu schreiben um die Nachricht abzusenden:

  1.  <?php
  2.    @mail("deineadresse@abc.de", "Kontakt", $_post['nachricht'], "From: $_POST[email]");
  3.  ?>


Dieser Code würde die eingegebene Nachricht, die unter der Variable $_POST['nachricht'] definiert wurde an die Empfängeradresse schicken. Als Betreff würde hier "Kontakt" genommen werden und die Absenderadresse wäre die eingegebene Adresse des Users: $_POST[email]. Die Namen der Variablen haben das Muster $_POST[], weil wir im HTML Bereich als method POST ausgewählt haben. Die Bezeichnung innerhalb der eckigen Klammern ist der jeweilige name-Wert im form-Tag, also in unserem Fall die Werte in der
  1.  <textarea>
und im
  1.  <input type="text" />
.

Sicherheit

Das derzeitige Problem ist allerdings, dass der Webseitenbetreiber selbst dann eine E-Mail kriegt, wenn eines oder beide Felder leer gelassen werden. Ein willkommenes Leck für Spammer. Aus diesem Grund benutzen wir eine if-Abfrage um zu testen ob die Felder frei sind, dazu benutzen wir die Funktion !empty(variablename). Diese fragt ab ob sich ein Wert befindet, der kleiner gleich null ist, falls keiner vorhanden ist, so wird die E-Mail nicht verschickt:

  1.  <?php
  2.  if(!empty($_post['email']) && !empty($_post['nachricht'])) {
  3.    @mail("deineadresse@abc.de", "Feedback", $_post['nachricht'], "From: $_POST[email]");
  4.  }
  5.  ?>


Die if-Abfrage beginnt mit !empty($_POST['email']) und wird mit && !empty(_$['nachricht']) erweitert. Erst dann kommt die geschweifte Klammer und somit der bisherige Code, also das Verschicken der Nachricht. Dannnach wird der if-Satz noch mit einer weiteren geschweiften Klammer geschlossen.

Als nächstes sollten wir sicherstellen, dass auch kein fremder HTML-Code eingetippt wird, damit nicht etwa externe Dateien eingebunden werden. Dazu benutzen wir die bewährte Funktion htmlspecialchars().

  1.  <?php
  2.  if(!empty($_post['email']) && !empty($_post['nachricht'])) {
  3.    $email = htmlspecialchars("$_post[email]");
  4.    @mail("pdalipi@gmail.com", "Feedback", $_post['nachricht'], "From: $email");
  5.  }
  6.  ?>


Zuerst erstellen wir eine neue Variable $email, sie wird mit der Funktion htmlspecialchars() definiert, die eine Eingabe bearbeitet. In der mail() Funktion setzen wir deswegen die neue Variable statt der alten ein, da diese den veränderten Wert besitzt.

Bequemlichkeit

Im Web passiert es häufig mal, dass man sich verklickt oder irgendwie etwas falsch macht. Nehmen wir an, man drückt versehentlich die F5-Taste, dann wird die Seite neu geladen und die ganze Nachricht ist weg. Daher ist es gut, wenn man die eingegebenen Werte speichert. Dazu benutzen wir die Funktion isset() zum Abfragen des Wertes und die Funktion echo zum ausgeben der Daten. Da dies innerhalb der Eingabefelder erscheinen soll, wird der PHP Code dort in einer neuen Wertedefinition value eingegeben.

  1.  <input type="text" name="email" value="<?php
  2.  if (isset($_post['email'])) {
  3.  echo htmlspecialchars("$_post[email]");
  4.  } ?>" />
  5.  <textarea name="nachricht" cols="50" rows="5" value="<?php
  6.  if (isset($_POST['nachricht'])) {
  7.  echo htmlspecialchars("$_POST[nachricht]");
  8.  } ?>"></textarea>


Wir haben nun für beide Tags einen value-Wert erzeugt, in die Anführungszeichen wird nun der PHP-Code gesetzt, der mit der Funktion isset() zuerst abfragt ob ein Wert enthalten ist und diesen dann ggf. durch die Funktion htmlspecialcahrs() von HTML-Code befreit und mit echo ausgibt.

3. Extras

Das Kontakformular wäre somit eigentlich fertig. Zur Verbesserung kann man allerdings den ein oder anderen Zusatz coden. Hier führe ich einige Beispiele auf:

Bestätigung

Durch eine einfach if-Abfrage können wir dem User ausgeben, dass seine Nachricht verschickt wurde, dazu ändern wir den bisherigen Code um und fügen einen weiteren if-Satz ein. Hier der ursprüngliche Code:

  1.  <?php
  2.  if(!empty($_POST['email']) && !empty($_POST['nachricht'])) {
  3.  $email= htmlspecialchars("$_POST[email]");
  4.    @mail("pdalipi@gmail.com", "Feedback", $_POST['nachricht'], "From: $email");
  5.  }
  6.  ?>


Jetzt setzen wir die mail()-Funktion unter einer anderen if-Abfrage, die zusätzlich noch ausgibt, dass die Nachricht abgeschickt wurde.

  1.  <?php
  2.  if(!empty($_POST['email']) && !empty($_POST['nachricht'])) {
  3.  $email= htmlspecialchars("$_POST[email]");
  4.    if (@mail("pdalipi@gmail.com", "Feedback", $_POST['nachricht'], "From: $email")) { echo "Die Nachricht wurde abgeschickt";
  5.  } else { 
  6.    echo "Es gab einen Fehler";
  7.  }
  8.  }
  9.  ?>


Die mail()-Funktion wird als if-Frage gesetzt, hat dies funktioniert, so wird der Text "Die Nachricht wurde abgeschickt" per echo-Funktion ausgegeben. Hat etwas doch nicht geklappt, so erscheint die Nachricht "Es gab einen Fehler" im else-Anhang.

Mit JavaScript ließen sich zu diesen Befehlen natürlich auch PopUps erstellen, die vielleicht optisch mehr hermachen würden.

Man könnte bei positiver Abfrage natürlich auch eine Bestätigungsmail schicken. Dafür benutzt man die mail()-Funktion ein weiteres Mal, nur ist jetzt die Empfängeradresse $_POST[email] und die FROM:-Adresse die eigene. Zusätzlich sollte man natürlich Nachricht und Betreff verändern.

Captcha

Zur besseren Spamprotection wäre eine Captchaabfrage natürlich auch sinnvoll. Eine ausführliche Beschreibung würde hier allerdings den Rahmen sprengen. Mehr zu Captchas...

Nachrichtdefinierung

Durch eine Zwischenvariable kann man die eigentliche Nachricht des Users $_POST[nachricht] im Nachinein mit anderen PHP-Funktionen verändern, zum Beispiel date() zur Zeit- oder Datumsangabe.

  1.  <?php
  2.  $nachricht = $_POST[nachricht];
  3.  $datum = date(Y: i);
  4.  $nachrichtk = echo "Mail vom $datum: $nachricht";
  5.  ?>


Fragen? Probleme? Keine Antworten? Hilfe finden Sie im Webmaster Forum!

Diese Artikel könnten Sie auch interessieren:
Reguläre Ausdrücke
Unterschiedlicher Footer auf verschiedenen Seiten
String nach Wortende trennen
Alternative Syntax für Kontroll-Strukturen
Was ist PHP?


 
Anzeige