<?php
require_once 'secureForm.php';
$form_sent = false;
// Eine neue Instanz der Klasse wird erzeugt
$form = new SecureForm();
// Fr jedes Formfeld wird eine zufllige (CSS-)ID erzeugt und in den Variablen gespeichert
$id_name = $form->getID('name');
$id_email = $form->getID('email');
$id_phone = $form->getID('phone');
$id_nachricht = $form->getID('nachricht');
// Der Submit-Button muss nicht zwangsweise "anonymisiert" werden
$id_submit = $form->getID('submit');
// Die CSS-Datei wurde vom Browser angefordert und wird abgeschickt
if (isset ($_GET['getCSS'])) {
header ("Content-Type: text/css");
$form->generateCSS();
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>...</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index,follow" />
<meta name="copyright" content=" ... " />
<meta name="keywords" content=" ... " />
<meta name="description" content=" ... " />
<style type="text/css" media="screen">
@import url(../css.css);
body {
font-family: Arial, Helvetica, Geneva, sans-serif;
color: #666;
margin: 0;
}
fieldset {
margin-top: 3em;
margin-bottom: 20px;
vertical-align: center;
}
fieldset legend {
margin-bottom: 1.3em;
font-size: 1em;
font-weight: bold;
}
label {
font-size: 16px;
}
input {
border: #666 solid 1px;
width: 14em;
font-size: 1em;
padding: 5px;
margin: 0;
margin-top: 5px;
}
textarea {
border: #666 solid 1px;
width: 45em;
height: 20em;
font-size: 1em;
padding: 5px;
margin: 0;
margin-top: 5px;
}
/* Dieser Abschnitt ist fuer das Skript wichtig */
.form input, .form textarea {
position: static !important;
display: block !important;
speak: normal !important;
}
</style>
</head>
<body>
<?php
// Es wird nun geprft, ob der Submit-Knopf gedrckt und das Formular abgesendet wird.
// Die Formularfelder sind mit den verschiedenen IDs als Namen gespeichert.
if (!empty ($_POST[$id_submit])) {
$form_sent = true;
// Zuerst berprfen wir, ob alle gewnschten Felder ausgefllt sind
if (!empty ($_POST[$id_name]) && !empty ($_POST[$id_email]) && !empty ($_POST[$id_phone]) && !empty ($_POST[$id_nachricht])) {
// Danach wird geprft, ob das versteckte Feld ausgefllt wurde.
// Sollte das der Fall sein haben wir es hchstwahrscheinlich mit einem Spambot zu tun
// Hier knnten auch weitere Aktionen unternommen werden, z.B. loggen und/oder sperren der IP des Bots, o..
if (!empty ($_POST[$form->getSecretID()])) {
session_destroy ();
echo 'Spambot erkannt.';
exit;
}
// Nun knnen wir die E-Mail versenden
$name = $_POST[$id_name];
$email = $_POST[$id_email];
$phone = $_POST[$id_phone];
$nachricht = $_POST[$id_nachricht];
// E-Mail verschicken...
mail ('abc@def.de', 'Nachricht per Kontaktformular von ' . $name, $name . ' (Email:' . $email . ' Telefon: ' . $phone . ") hat um " . date('d.m.Y H:i:s', time()) . " eine Nachricht geschrieben:\n" . $nachricht, 'From: abcdefg@hij.de' );
session_destroy ();
echo '
<h2><br /><br />Vielen Dank für Ihre Nachricht.<br /> Wir werden uns schnellstmöglich um Ihr Anliegen kümmern.</h2>
';
//exit;
}
// Falls nicht alle Felder ausgefllt sind sollte die Session-ID sowie die geheimen IDs erneuert werden,
// um mgliche Brut-Force-Angriffe von Bots aus dem Weg zu gehen.
// WICHTIG: Vor dem erneuern drfen die Header noch nicht gesendet werden!
$form->regenerateIDs();
}
else
{
/* Nun wird das Formular erzeugt:
Eventuell wird es auch in Templates eingebunden o..
Vorher sollten normalerweise der HTML-Kopf, etc. kommen
Wichtig ist, dass die Session-ID bergeben wird!
Alternativ kann diese auch mit einem versteckten Feld und POST bergeben werden,
PHP erkennt diese automatisch.
Auerdem drfen die beiden Stylesheets nicht fehlen!
Das erste Stylesheet ist die Vorgabe fr die normalen Felder.
Da diese Angabe *vor* den anderen kommt, gilt diese.
Bei den versteckten Feldern wird zustzlich ein !important hingehngt, damit werden die Felder unsicht- und -hrbar.*/
echo '
<link rel="stylesheet" type="text/css" href="index.php?getCSS&' . SID . '" media="all" />
<fieldset>
<legend>Kontaktformular:</legend>
<!-- Auch hier ist die Session-ID wichtig, um die IDs spaeter wieder den Feldern zuzuordnen -->
<form action="index.php?' . SID . '" method="POST" class="form">';
// Nun werden die einzelnen Eingabefelder ausgegeben.
// Dabei wird gleich berprft, ob das Formular bereits abgesendet wurde und ob Felder fehlen.
echo '
<label>Ihr Name' . ((($form_sent && empty ($_POST[$id_name]))) ? ' (fehlt)' : '') . ':</label> <input type="text" id="' . $id_name . '" name="' . $id_name . '" value ="' . ((!empty ($_POST[$id_name])) ? htmlspecialchars ($_POST[$id_name]) : '') . '" /><br />
<label>Ihre E-Mail-Adresse' . ((($form_sent && empty ($_POST[$id_mail]))) ? ' (fehlt)' : '') . ':</label> <input type="text" id="' . $id_email . '" name="' .$id_email . '" value="' . ((!empty ($_POST[$id_email])) ? htmlspecialchars ($_POST[$id_email]) : '') . '" /><br />
<label>Ihre Telefonnummer' . ((($form_sent && empty ($_POST[$id_phone]))) ? ' (fehlt)' : '') . ':</label> <input type="text" id="' . $id_phone . '" name="' .$id_phone . '" value="' . ((!empty ($_POST[$id_phone])) ? htmlspecialchars ($_POST[$id_phone]) : '') . '" /><br />
<label>Ihre Nachricht' . ((($form_sent && empty ($_POST[$id_nachricht]))) ? ' (fehlt)' : '') . ':</label><br />
<textarea name="' . $id_nachricht . '" id="' . $id_nachricht . '">' . ((!empty ($_POST[$id_nachricht])) ? htmlspecialchars ($_POST[$id_nachricht]) : '') . '</textarea><br />
<input type="text" name="' . $form->getSecretID() . '" id="' . $form->getSecretID() . '" value="" />' . // Auch das versteckte Feld bekommt seinen Platz
'
<input type="submit" name="' . $id_submit . '" id="' . $id_submit . '" value="Formular absenden" />
</form>
</fieldset>';
}
// Fertig. :)
// Man knnte das versteckte Feld noch an zuflligen Positionen erscheinen lassen, um es den Spambots nicht zu leicht zu machen.
?>
</div><!--kontakt-->
</body>
</html>