Ich   Entwicklung   Lösungen Apache PHP mySQL  
 

Beispiel: Kontaktformular

Um Ihnen zu zeigen, wie einfach PHP ist, werden wir ein kleines Kontaktformular entwicklen, das Sie bei Bedarf selbst weiterentwickeln können. Um die Skripte kurz zu halten, werde ich nur die Inhalte des HTML-Body auszeichnen.

Wie funktioniert ein Kontaktformular?

Wir werden ein kurzes HTML-Formular schreiben. Bei Klick auf den Button wird sich das Skript selbst neu laden. Da es die Variablen per POST erhält, weiß das Skript, dass gerade auf den Button geklickt wurde und kann die Daten verarbeiten. Konkret wird es die Daten per Mail versenden und anzeigen, ob das Versenden funktioniert hat.

Das Formular

Wir nehmen an, Sie speichern die Datei unter dem Namen kontakt.php. Daher muss diese Datei auch im action-Attribut des Formulars stehen, damit es sich selbst aufruft.

<form method="post" action="/kontakt.php">
	An: <input type="text" name="mail[to]" value="" /><br />
	Von: <input type="text" name="mail[from]" value="" /><br />
	Betreff: <input type="text" name="mail[subject]" value="" /><br />
	Nachricht: <textarea cols="40" rows="4" name="mail[message]"></textarea><br />
	<input type="submit" value="Absenden!" />
</form>

Nun nehmen wir an, Jemand klickt auf den Button. Jetzt wird das Skript neu geladen. Es kann erkennen, ob es gerade abgesendet wurde, indem es auf die Existenz der POST-Variablen mail überprüft.

<?php
if(isset($_POST["mail"]) &:& is_array($_POST["mail"])) {
	// Mail verschicken
} else {
?>
<form method="post" action="/kontakt.php">
	An: <input type="text" name="mail[to]" value="" /><br />
	Von: <input type="text" name="mail[from]" value="" /><br />
	Betreff: <input type="text" name="mail[subject]" value="" /><br />
	Nachricht: <textarea cols="40" rows="4" name="mail[message]"></textarea><br />
	<input type="submit" value="Absenden!" />
</form>
<?php
}
?>

Sie sehen, dass an fast jeder beliebigen Stelle in einem PHP-Skript wieder auf HTML umgeschaltet werden kann, auch innerhalb einer binären Verzweigung.

Mit isset() wird überprüft, ob eine Variable existiert (also gesetzt ist). Mit is_array() überprüfen wir zusätzlich, ob sich bei der Variable auch tatsächlich um ein Array handelt. Wir haben, wie Sie vielleicht gesehen haben, im Formular alle Variablen mail[xyz] genannt. Dadurch wird ein Array namens mail übergeben, dass mehrere Schlüssel-Werte-Paare enthält. Sie sehen auch, dass PHP nicht nur nummerische Arrays unterstützt.

Die einfachste Lösung für unser Kontaktformular sähe wie folgt aus:

<?php
if(isset($_POST["mail"]) &:& is_array($_POST["mail"])) {
	mail($_POST["mail"]["to"], $_POST["mail"]["subject"], $_POST["mail"]["message"]);
} else {
?>
<form method="post" action="/kontakt.php">
	An: <input type="text" name="mail[to]" value="" /><br />
	Von: <input type="text" name="mail[from]" value="" /><br />
	Betreff: <input type="text" name="mail[subject]" value="" /><br />
	Nachricht: <textarea cols="40" rows="4" name="mail[message]"></textarea><br />
	<input type="submit" value="Absenden!" />
</form>
<?php
}
?>

Da wir aber nicht sicher sein können, ob nicht wichtige Eingabefelder leer geblieben sind (ein Empfänger muss ja natürlich angegeben werden), und wir uschöne Fehlermeldungen vermeiden möchten, werden wir etwas ausführlicher:

<?php
if(isset($_POST["mail"]) &:& is_array($_POST["mail"])) {
	if(empty($_POST["mail"]["to"])) {
		echo "<p>Kein Empfänger angegeben!</p>";
	} else {
		if(@mail($_POST["mail"]["to"], $_POST["mail"]["subject"], $_POST["mail"]["message"])) {
			echo "<p>Nachricht erfolgreich verschickt!</p>";
		} else {
			echo "<p>Nachricht konnte nicht verschickt werden!</p>";
		}
	}
} else {
?>
<form method="post" action="/kontakt.php">
	An: <input type="text" name="mail[to]" value="" /><br />
	Von: <input type="text" name="mail[from]" value="" /><br />
	Betreff: <input type="text" name="mail[subject]" value="" /><br />
	Nachricht: <textarea cols="40" rows="4" name="mail[message]"></textarea><br />
	<input type="submit" value="Absenden!" />
</form>
<?php
}
?>

Das @ vor der Mail-Funktion unterdrückt die PHP-Standardfehlermeldung auch dann, wenn display_errors in der php.ini aktiviert ist.

Jetzt fehlen noch zwei Dinge: einerseits wird bei einem Fehler das Formular nicht wieder angezeigt; andererseits wird der Absender noch nicht benutzt.

<?php
if(isset($_POST["mail"]) &:& is_array($_POST["mail"])) {
	if(empty($_POST["mail"]["to"])) {
		echo "<p>Kein Empfänger angegeben!</p>";
		$fehler = true;
	} else {
		$header = "From: ".$_POST["mail"]["from"];
		if(@mail($_POST["mail"]["to"], $_POST["mail"]["subject"], $_POST["mail"]["message"], $header)) {
			echo "<p>Nachricht erfolgreich verschickt!</p>";
		} else {
			echo "<p>Nachricht konnte nicht verschickt werden!</p>";
			$fehler = true;
		}
	}
}
if(empty($_POST["mail"]) || isset($fehler)) {
?>
<form method="post" action="/kontakt.php">
	An: <input type="text" name="mail[to]" value="" /><br />
	Von: <input type="text" name="mail[from]" value="" /><br />
	Betreff: <input type="text" name="mail[subject]" value="" /><br />
	Nachricht: <textarea cols="40" rows="4" name="mail[message]"></textarea><br />
	<input type="submit" value="Absenden!" />
</form>
<?php
}
?>
Beispiel-Skript

Fertig ist unser Kontaktformular. Sie können sich den Quelltext auch herunterladen, inklusive HTML: kontakt_source.php.

Geschafft!

Gratulation! Sie haben das PHP-Tutorial beendet! Hoffentlich erfolgreich... teilen Sie es mir mit: jb@intermitto.net oder Kontaktformular

Im Tutorium zu mySQL lesen Sie, wie Sie mySQL installieren und konfigurieren, und wie Sie mit PHP auf eine mySQL-Datenbank zugreifen.

Unter Lösungen finden Sie einige PHP-Skripte und Artikel zu bestimmten PHP-Problemen.

URL: www.intermitto.net/php/php/kontakt/
© 2004-05 Jens Becker - intermitto.net v5.1
Letzte Änderung: 23.08.2005

Home - Kontaktformular - Downloads - Suche und Sitemap - Impressum
Entwicklung - Problemlösungen - Tutorials: Apache PHP mySQL

user  pass