Kontaktformular

Vorüberlegung
In diesem Beispiel nutzen wir ein gewöhnliches HTML-Formular mit folgenden Komponenten:
- 2 Eingabefelder
- 2 "Radio"-Felder und
- 1 Auswahlfeld.
Was im Formular abgefragt wird:
- Name
- E-Mailadresse
- Registrierter Benutzer: Ja/Nein
- Wie findet ihr die Seite?

Das Formular
Das wichtigste ist das Eingabeformular. Wir geben unseren Feldern folgende Namen:
- Abfrage des Namens: "name"
- Abfrage der E-Mail: "EMail"
- Reg. Benutzer (Ja/Nein): "user"
- Meinung zur Seite: "meinung"
ZU BEACHTEN: Auf Groß- und Kleinschreibung wird in PHP geachtet!!!
So, fangen wir nun an. Das Formular nennen wir form.html. Hier der Quelltext:

<html>

<head>
<title>Dateneingabe</title>
</head>

<body>

<h1 align="center">Meinungen</h1>

<p><form action="auswert.php" method="post">
Dein Name: <input name="name" size="20"><br>
E-Mail: <input name="EMail" size="20"><br>
Bist du einer unserer Benutzer? <input type="radio" name="user" value="Ja">Ja--- ---<input type="radio" name="user" value="Nein">Nein<br>
Wie findest du unsere Seite?<br>
<select name="meinung" size="1">
<option>Sehr gut
<option>Gut
<option>Befriedigend
<option>Ausreichend
<option>Mangelhaft
<option>Ungenügend
</select><br><br>

<input type="submit" value="Abschicken">
</form></p>

</body>

</html>
Das ganze sähe dann in etwa so aus:
Formular in der Ansicht
Und jetzt zum eigentlichen Kernteil: Der Auswertung

Auswertung mit PHP
Es ist wichtig, sich die Namen der Felder zu merken. In PHP werden diese als Variablen mit ihren Formularnamen eingesetzt. Wir haben also jetzt folgende Variablen:
$name, $EMail, $user, $meinung.
Wir könnten jetzt ganz einfach hergehen und sagen, unsere Auswertung besteht darin, dem Benutzer noch einmal zu zeigen, was er eingegeben hat. Das sähe dann so aus:

<?php
echo "Ihr name ist ".$name.".<br>";
echo "Ihre E-Mailadresse lautet ".$EMail.".<br>";
echo "Sind Sie User? ".$user."<br>";
echo "Sie finden unsere Seite ".$meinung.".";
?>
Das wäre aber etwas langweilig und recht unnützlich. Der User wird schließlich noch wissen, was er eingegeben hat. Wir nähern uns der mail()-Funktion. Aber zuerst brauchen wir noch ein paar Grundlagen.

Hat der Benutzer etwas eingegeben? - Die if()-Funktion
Um zu prüfen, ob der Benutzer etwas eingegeben hat, nutzen wir eine if-Abfrage. if ist englisch und bedeutet soviel wie WENN. Der Aufbau geht so:
if (Voraussetzung)
{
  Anweisung;
}

In den runden Klammern wird abgefragt, was geprüft werden soll. In den geschwungenen Klammern stehen dann die Anweisungen, die gemacht werden sollen, wenn die Voraussetzung erfüllt ist (true ergibt).
Es gibt noch die Möglichkeit, zu sagen, was sonst gemacht werden soll. Das geht dann mit dem else-Befehl. else bedeutet sonst und kann noch mit if wieder in Verbindung gebracht werden ("sonst, wenn..."). Man kann Variablen mit anderem vergleichen. Dazu werden diese Befehle genutzt:
== (gleich)
!= (ungleich)
<= (kleiner/gleich)
>= (größer/gleich)
< (kleiner)
> (größer)
Zudem kann man zwei Anweisungen verbinden:
&& (UND)
|| (ODER)
Ein Beispiel:

<?php
$a = 7;
if ($a <= "3")
{
  echo $a." ist kleiner oder gleich 3.";
}
else if ($a > "3" && $a <= "7")
{
  echo $a." ist größer als 3 und kleiner oder gleich 7.";
}
else
{
  echo $a." ist größer als 7.";
}
?>
Man kann zwischen { und } beliebig viele Befehle schreiben. Diese enden dann mit einem Semikolon (;). Normalerweise werden die Einzelbefehle untereinander geschrieben. Es ist aber nicht zwingend erforderlich (aber übersichtlicher).

Die ereg()-Funktion
ereg hilft dabei, zwei Dinge zu vergleichen. Wenn ich z.B. zwei Variablen habe und diese vergleichen möchte, kann ereg() sehr hilfreich sein. Zuerst einmal brauche ich ein Muster, das verglichen werden soll. Sinnvollerweise kann man daraus eine Variable machen. Mögliche Musterbefehle sind:

. Jeder beliebige Buchstabe.
^a Stimmt überein mit einem String, der mit dem Zeichen beginnt, das nach dem "Dach" steht.
a$ Stimmt überein mit dem String, der mit dem Zeichen endet, das vor dem Dollarzeichen steht.
a+ Stimmt überein mit dem String, der mehrfach, mindestens aber einmal, vorkommt.
a? Stimmt überein mit dem String, der höchstens einmal auftritt.
a* Stimmt überein mit dem String, der beliebig häufig auftreten kann - auch keinmal.
\n Stimmt mit einer neuen Zeile überein
a{2} Stimmt überein mit einem String, der genau zweimal auftritt.
a{1,} Stimmt überein mit einem String, der mindestens einmal auftritt.
a{1,3} Stimmt überein mit einem String, der mindestens einmal und maximal dreimal auftritt.
[0-9] Eine beliebige Ziffer zwischen 0 und 9.

Wenn die Zeichenkette abc zweimal vorkommt, reicht es nicht, abc{2} zu schreiben, sondern (abc){2}! Die Klammern werden hier nicht verglichen. Beispiel:
$variable = "Hallo123";
$muster = ".{2}l{2}.([0-9]){3}";
$a = ereg($muster, $variable);
echo $a;
In diesem Beispiel sollte dann im Ergebnis true da stehen. Das Muster ist folgendermaßen: 2 beliebige Buchstaben (Ha), 2 mal das L, ein beliebiger Buchstabe und 3 beliebige Ziffern von 0 bis 9 (123). Das Muster stimmt also mit der Variablen überein. In Verbindung mit einer if()-Abfrage ist das auch sehr willkommen, da man hier schreiben kann:
$variable = "Hallo123";
$muster = ".{2}l{2}.([0-9]){3}";
if (ereg($muster, $variable))
{
  echo "Das Muster stimmt mit der Variablen überein.";
}
else
{
  echo "Das Muster stimmt nicht überein.";
}

Die Eingabeprüfung der E-Mailadresse
Die ereg()-Funktion ist jetzt nützlich. Will man prüfen, ob der Benutzer eine gültige E-Mailadresse eingegeben hat, macht man das mit der ereg()-Funktion. Der Quelltext im Bezug auf unsere Datei form.html wäre also:

<?php
$muster = "^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}\.){0,}[a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$";
if (ereg($muster, $EMail))
{
  echo "E-Mailadresse OK.";
}
else
{
  echo "E-Mailadresse ungültig.";
}
?>
Natürlich ist das auch noch nicht ganz sicher, aber schon mal ein Ansatz. Übrigens: In $muster kommt dreimal "\." vor. Der "\" sagt, dass es sich um einen normalen Punkt handelt, und nicht um den Befehl, einen beliebigen Buchstaben zu suchen. Will man einen normalen \, muss man auch hier eingeben: "\\", damit dann nur einer ausgegeben wird.

Die mail()-Funktion
Wie oben schon erwähnt: es ist nicht sinnvoll, dem Benutzer anzuzeigen, was er eingegeben hat. Es wäre doch viel sinnvoller, selber zu sehen, was die Benutzer von der eigenen Seite halten!!! Warum also keine E-Mail an sich selbst verschicken? Der - glücklicherweise existierende - Befehl dazu ist mail(). Starten wir mal mit einem Beispiel:

<?php
mail("[email protected]","Betreff","Inhalt der E-Mail","From: [email protected]");
?>
Im Beispiel wird eine E-Mail an die Adresse [email protected] verschickt. Der Betreff lautet "Betreff" und der Text, der in der E-Mail steht, ist "Inhalt der E-Mail". Wir haben also oben Absender, Betreff, Inhalt und etwas noch nicht erklärtes. Die Befehle werden mit Komma (,) abgetrennt. Der letzte Teil oben ist die so genannte Header-Information. Hier wurde einfach festgelegt, dass die E-Mail von (From: ) [email protected] ist. Es wurde also der Absender festgelegt.
WICHTIG: Nicht alle Server unterstützen die mail()-Funktion! Da hilft nur ausprobieren.

Das gesamte Script
Nun wieder zu unserem Kontaktformular. Wir erstellen nun die Datei auswert.php und fassen unser erworbenes Wissen in dieser einen Datei zusammen. Der Quellcode:

<?php
$muster = "^[_a-zA-Z0-9-](\.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}\.){0,}[a-zA-Z0-9-]{3,}(\.[a-zA-Z]{2,4}){1,2}$";
if ($user == "Ja")
{
  $wort = "ein";
}
else
{
  $wort = "kein";
}
if (ereg($muster, $EMail))
{
  mail("[email protected]","Meinung zu meiner Homepage",$name." ist ".$wort." User und findet die Seite ".$meinung."!","From: ".$EMail);
}
else
{
  echo "Die E-Mailadresse ist ungültig!";
}
?>