SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuch.php?group=42
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Formular samt Autoresponder


Nun kommen wir zu einem weiteren Punkt, der sich wohl nicht vermeiden lässt, nämlich der Umsetzung eines Kontaktformulars. Was wäre eine Website ohne ein Kontaktformular, schließlich sollen mögliche Besucher, Interessenten oder Kunden in der Lage sein, mit dem Betreiber der Website Kontakt aufzunehmen.

Um ein voll funktionsfähiges Kontaktformular umzusetzen, bedarf es nicht viel. Soll es jedoch beliebig viele Formularelemente verarbeiten können, sodass es für unterschiedliche Zwecke eingesetzt werden kann, müssen Sie etwas mehr Know-how haben.

Zur Umsetzung der Eingabemaske benötigen Sie zunächst eine HTML-Seite mit dem Namen kontaktformular.htm, welche ein von Ihnen entworfenes Formular enthält. Beim Einsatz der Formularelemente innerhalb der HTML-Seite ist darauf zu achten, dass das E-Mail-Textfeld den Namen mailer_email erhält. Alle anderen Formularelemente können Sie beliebig bezeichnen.



Bild 5.15: Aufbau der kontaktformular.htm-Eingabemaske

Für die Verarbeitung der Formulardaten sind zwei Skripts verantwortlich:

Zusätzlich wurden folgende drei Ordner angelegt:




Bild 5.16: Dateischema des Kontaktformulars{PSP}1. Atomicmailer.php
<?php
$form_name = "kontaktformular.htm";

//Stammen die Daten vom Formular?
if (isset($_POST["senden"])) {

// Textfeldeingaben filtern
function daten_reiniger($inhalt) {
  if (!empty($inhalt)) {
    // HTML- und PHP-Code entfernen.
    $inhalt = strip_tags($inhalt);
    // Umlaute und Sonderzeichen in
    //HTML-Schreibweise umwandeln
    $inhalt = htmlentities($inhalt);
    // Entfernt überflüssige Zeichen
    // Anfang und Ende einer Zeichenkette
    $inhalt = trim($inhalt);
    // Backslashes entfernen
    $inhalt = stripslashes($inhalt);
  }
return $inhalt;
}

// Schreibarbeit durch Umwandlung ersparen
foreach ($_POST as $key=>$element) {
  if ($key != "senden") {
    // Eingaben Filtern
    $daten = daten_reiniger($element);
    // Dynamische Variablen erzeugen, wie mailer_name, etc.
    ${"mailer_".$key} = $daten;
    $maildaten .= "$key: $daten\n";
  }
}

//Mailadresse korrekt angegeben – Name entsprechend formatieren
if(!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$mailer_email)){
  $error_msg.="Fehlerhafte E-mail!<br>";
}

// Prüfen, ob Fehler vorgekommen sind!
if($error_msg){
  echo "
  <html>
  <head>
  <title>Atomic-Mailer v1.0 – Fehler</title>
  <link rel='stylesheet' href='css/main.css' type='text/css'>
  </head>
  <body bgcolor='#FFFFFF' text='#000000'>
  <p align='center'><img src='bild/mailerlogo.gif' width='700' height='59'></p>
  <table width='300' align='center'>
    <tr>
      <td align='center' class='latestnews' colspan='3'>- FEHLER – <br>
      <p>$error_msg</p>
      <a href='$form_name' class='contentlink'>Zurück</a><br>
        Ihre Anfrage konnte nicht übermittelt werden.<br>
        Versuchen Sie es bitte erneut!<br>
      </td>
    </tr>
  </table>
  </body>
  </html>
";

} else {
$mailer_datum=date("Y-m-d H:i:s");

echo "
<html>
<head>
<title>Atomic-Mailer v1.0 – Versand</title>
<link rel='stylesheet' href='css/main.css' type='text/css'>
</head>
<body bgcolor='#FFFFFF' text='#000000'>
<p align='center'><img src='bild/mailerlogo.gif' width='700' height='59'></p>
<table width='300' align='center'>
  <tr>
    <td align='center' class='latestnews' colspan='3'>- Vielen Dank! – <br>
      Ihre Anfrage wurde erfolgreich verschickt.<br>
      Vielen Dank!<br>
    <a href='$form_name' class='contentlink'>Zurück</a></td>
  </tr>
</table>
</body>
</html>
";

include("autorespond.php");

}

} else {
echo "
<html>
<head>
<title>Atomic-Mailer v1.0 – Fehler</title>
<link rel='stylesheet' href='css/main.css' type='text/css'>
</head>
<body bgcolor='#FFFFFF' text='#000000'>
<p align='center'><img src='bild/mailerlogo.gif' width='700' height='59'></p>
<table width='300' align='center'>
  <tr>
    <td align='center' class='latestnews' colspan='3'>- FEHLER – <br>
      Ihre Anfrage konnte nicht übermittelt werden.<br>
      Versuchen Sie es bitte erneut!<br>
    <a href='$form_name' class='contentlink'>Zurück</a></td>
  </tr>
</table>
</body>
</html>
";
}
?>
{PSP}
Bild 5.17: Kontaktformular im Einsatz

2. Autorespond.php

<?php

if (isset($_POST["senden"])) {

// Mail an Webmaster
$webmaster="matthiask@flashstar.de";

$mailinhalt = "
Atomic-Mailer – Anfrage\n
__________________\n
E-mail: $mailer_email\n
__________________\n
$maildaten
__________________\n
Zeit: $mailer_datum\n
__________________\n";

@mail($webmaster, "Atomic-Mailer – Anfrage", $mailinhalt, "From: $mailer_email");

// Autoresponder
$datei = "text/automail.txt";
$fp = fopen($datei, "r");
$inhalt = fread($fp,filesize($datei));
fclose($fp);

@mail("$mailer_email", "Atomic-Mailer – Danke für Ihre Anfrage", "$inhalt\n\n","From:$webmaster");

} else {

echo "
<html>
<head>
<title>Atomic-Mailer v1.0</title>
<link rel='stylesheet' href='css/main.css' type='text/css'>
</head>
<body bgcolor='#FFFFFF' text='#000000'>
<p align='center'><img src='bild/mailerlogo.gif' width='700' height='59'></p>
<table width='300' align='center'>
  <tr>
    <td align='center' class='latestnews' colspan='3'>- FEHLER – <br>
      Die Anfrage konnte nicht übermittelt werden.<br>
      Versuchen Sie es bitte erneut!<br>
    <a href='kontaktformular.htm' class='contentlink'>Zurück</a></td>
  </tr>
</table>
</body>
</html>
";
}

?>


Variante Formmailer

Formulare gibt es in unterschiedlichen Formen und Darstellungsweisen. Eines jedoch haben sie gemeinsam, alle versenden Daten via GET oder POST. Die Frage ist nur, wie der Server diese Daten verarbeitet und wie PHP dabei behilflich sein kann. Ich möchte Ihnen dazu einen Formmailer vorstellen.



Bild 5.18: Formmailer-Formular – HTML-Dokument{PSP}Das Formular selbst ist ein einfaches HTML-Dokument, welches über JavaScript-Abfragen und Formularelemente verfügt. Die wohl interessanteste Passage im HTML-Dokument sind folgende Codezeilen:

<input type="hidden" name="mailer" value="Atomic Mailer">
<input type="hidden" name="trennzeichen" value=": ">
<input type="hidden" name="automailtext" value="answer.txt">
<input type="hidden" name="weiterleitung" value="meldung.htm">

Innerhalb des <form>-Tags werden die Übertragungsmethode und das betreffende PHP-Dokument festgelegt. Die <input>-Felder, welche versteckt sind, dienen als Konfigurationshilfe.

Achtung: Sie sollten bei der Erweiterung des Formulars unbedingt darauf achten, dass Sie diese vier versteckten Felder nicht entfernen und, falls Sie sie anpassen wollen, lediglich die Inhalte der value-Attribute bearbeiten.

Im PHP-Dokument mailform.php sind die für die Mailübertragung verantwortlichen Codezeilen enthalten. Um die Formulardaten an eine bestimmte E-Mail-Adresse und einen Webmaster zu versenden, müssen Sie die zwei folgenden Codezeilen anpassen:

$webmaster = "Matthias Kannengiesser";
$webmastermail = "matthiask@flashstar.de";

Sämtliche übrigen Codezeilen müssen nicht angepasst werden. Der Formmailer verfügt über folgende Funktionen:



Bild 5.19: Fehler bzw. erfolgreiche Übertragung der Formulardaten