PHP-Code:
<?php
/*******************************************/
/* formmailer.php */
/* */
/* FORMMAILER mit Reloadsperre */
/* */
/* von Steffen Kamper */
/* erstellt für das Traumprojekt-Forum */
/* angepasst von Primajin */
/*******************************************/
//erstmal Variablen definieren
$pagename="formmailer.php";
$error=$username=$pass=$vorname=$nachname=$email=$firm=$street=$plz=$ort=$land=$telefon=$birth=$message="";
// an wen geht die Mail ?
$empfaenger="name@domain.de";
if(isset($_POST['domail'])) {
// es wurde abschicken gedrückt, also erst mal die Felder holen
$username=get_magic_quotes_gpc() ? stripslashes($_POST['username']) : $_POST['username'];
$pass=get_magic_quotes_gpc() ? stripslashes($_POST['pass']) : $_POST['pass'];
$vorname=get_magic_quotes_gpc() ? stripslashes($_POST['vorname']) : $_POST['vorname'];
$nachname=get_magic_quotes_gpc() ? stripslashes($_POST['nachname']) : $_POST['nachname'];
$email=get_magic_quotes_gpc() ? stripslashes($_POST['email']) : $_POST['email'];
$firm=get_magic_quotes_gpc() ? stripslashes($_POST['firm']) : $_POST['firm'];
$street=get_magic_quotes_gpc() ? stripslashes($_POST['street']) : $_POST['street'];
$plz=get_magic_quotes_gpc() ? stripslashes($_POST['plz']) : $_POST['plz'];
$ort=get_magic_quotes_gpc() ? stripslashes($_POST['ort']) : $_POST['ort'];
$land=get_magic_quotes_gpc() ? stripslashes($_POST['land']) : $_POST['land'];
$telefon=get_magic_quotes_gpc() ? stripslashes($_POST['telefon']) : $_POST['telefon'];
$birth=get_magic_quotes_gpc() ? stripslashes($_POST['birth']) : $_POST['birth'];
//Form-Attacken verhindern (suche nach \r\n oder \n)
if(strpos($username,"\r\n")>0 || strpos($username,"\n")>0) {
DebugAttack(substr($username,strpos($username,"\r\n")));
$username="";
}
if(strpos($pass,"\r\n")>0 || strpos($pass,"\n")>0) {
DebugAttack(substr($pass,strpos($pass,"\r\n")));
$pass="";
}
if(strpos($vorname,"\r\n")>0 || strpos($vorname,"\n")>0) {
DebugAttack(substr($vorname,strpos($vorname,"\r\n")));
$vorname="";
}
if(strpos($nachname,"\r\n")>0 || strpos($nachname,"\n")>0) {
DebugAttack(substr($nachname,strpos($nachname,"\r\n")));
$nachname="";
}
if(strpos($email,"\r\n")>0 || strpos($email,"\n")>0) {
DebugAttack(substr($email,strpos($email,"\r\n")));
$email="";
}
if(strpos($firm,"\r\n")>0 || strpos($firm,"\n")>0) {
DebugAttack(substr($firm,strpos($firm,"\r\n")));
$firm="";
}
if(strpos($ort,"\r\n")>0 || strpos($ort,"\n")>0) {
DebugAttack(substr($ort,strpos($ort,"\r\n")));
$ort="";
}
if(strpos($plz,"\r\n")>0 || strpos($plz,"\n")>0) {
DebugAttack(substr($plz,strpos($plz,"\r\n")));
$plz="";
}
if(strpos($land,"\r\n")>0 || strpos($land,"\n")>0) {
DebugAttack(substr($land,strpos($land,"\r\n")));
$land="";
}
if(strpos($telefon,"\r\n")>0 || strpos($telefon,"\n")>0) {
DebugAttack(substr($telefon,strpos($telefon,"\r\n")));
$telefon="";
}
if(strpos($birth,"\r\n")>0 || strpos($birth,"\n")>0) {
DebugAttack(substr($birth,strpos($birth,"\r\n")));
$birth="";
}
if(strpos($street,"\r\n")>0 || strpos($street,"\n")>0) {
DebugAttack(substr($street,strpos($street,"\r\n")));
$street="";
}
//Message setzt sich aus allen Eingaben zusammen
$message=get_magic_quotes_gpc() ? stripslashes($_POST['message']) : $_POST['message'];
// wir setzen einen Flag, um Fehler zu registrieren
$ok=true;
//jetzt werden die Felder überprüft
if (strlen($username)<5) // der Name muss mindestens 5 Zeichen haben
{
$err[4]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihren Benutzernamen an. (mindestens 5 Zeichen)<br>'; // Fehlertext
}
if (strlen($pass)<5) // der Name muss mindestens 5 Zeichen haben
{
$err[5]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte vergeben Sie ein Passwort. (mindestens 5 Zeichen)<br>'; // Fehlertext
}
if (strlen($vorname)<3) // der Name muss mindestens 3 Zeichen haben
{
$err[0]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihren Vornamen an. (mindestens 3 Zeichen)<br>'; // Fehlertext
}
if (strlen($nachname)<3) // der Name muss mindestens 3 Zeichen haben
{
$err[3]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihren Nachnamen an. (mindestens 3 Zeichen)<br>'; // Fehlertext
}
if ( (!(eregi('^[a-z0-9_\.-]+@[a-z0-9_-]+\.[a-z0-9_\.-]+$',$email))) && (strlen($email)>0) || $email=="")
{
//email-Adresse ist ungültig
$err[1]=true;
$ok=false;
$error.='Bitte kontrollieren Sie die angegebene E-Mail-Adresse.<br>';
}
if (strlen($message)<10) // die Message muss mindestens 10 Zeichen haben
{
$err[2]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie einen Hinweis von mindestens 10 Zeichen ein.<br>'; // Fehlertext
}
if (strlen($street)<5) // die Straße muss mindestens 5 Zeichen haben
{
$err[7]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihre Straße an. (mindestens 6 Zeichen)<br>'; // Fehlertext
}
if (!is_numeric($plz)) // die Postleitzahl muss aus Zahlen bestehen
{
$err[8]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie eine korrekte Postleitzahl ein.<br>'; // Fehlertext
} else
{
if ($land == 'Deutschland')
{
if (strlen($plz)<>5) // die Postleitzahl in Deutschland muss 5 Zeichen haben
{
$err[8]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie eine korrekte deutsche Postleitzahl ein.<br>'; // Fehlertext
}
if (strlen($telefon)<7) // die Telefonnummer muss mindestens 7 Zeichen haben
{
$err[11]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihre Telefonnummer (nur Zahlen) mit Vorwahl an.<br>'; // Fehlertext
}
} else //Da nur Deutschland, Österreich und die Schweiz zur Verfügung stehen, und D schon abgefragt wurde
{
if (strlen($plz)<>4) // die Postleitzahl in Österreich und in der Schweiz muss 4 Zeichen haben
{
$err[8]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie eine korrekte Postleitzahl ein.<br>'; // Fehlertext
}
if (strlen($telefon)<7) // die Telefonnummer muss mindestens 7 Zeichen haben
{
$err[11]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihre Telefonnummer (nur Zahlen) mit Orts- und Landesvorwahl an.<br>'; // Fehlertext
}
}
}
if (strlen($ort)<3) // der Ort muss mindestens 3 Zeichen haben
{
$err[9]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihren Ort an. (mindestens 3 Zeichen)<br>'; // Fehlertext
}
if (strlen($birth)<8) // das geburtsdatum muss mindestens 8 Zeichen haben (TTMMYYYY [8] / TT.MM.YYYY [10])
{
$err[12]=true; //Fehler merken
$ok=false; //Fehlerflag setzen
$error.='Bitte geben Sie Ihr Geburtsdatum ein (Bsp. 01.01.1970).<br>'; // Fehlertext
}
// ist alles ok ? dann senden
if($ok)
{
//Mail komponieren
$mailheader="From: Anmeldung@domain.de\r\nX-Mailer: PHP/" . phpversion(). "\r\nX-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\r\nContent-Type: text/html; charset=ISO-8859-1;";
$message=nl2br("Benutzername: $username\nPasswort: $pass\nVorname: $vorname\nNachname: $nachname\nEmail: <a href=\"mailto:$email\">$email</a>\nFirma: $firm\nStrasse: $street\nPLZ: $plz\nOrt: $ort\nLand: $land\nTelefon: $telefon\nGeburtstag: $birth\n<hr>$message");
$subject="Anmeldung vom ".date("d.m.Y")." um ".date("H:i");
if (@mail($empfaenger, $subject, $message, $mailheader)) {
//Alles ok, Seite neuladen (Reloadsperre)
header("Location:$pagename?success");
//falls kein Header gesendet werden kann, dann mit javascript
echo '<script type="text/javascript">document.location.href="'.$pagename.'?success"</script>';
exit;
} else {
$error='<h3>Fehler beim Mailen aufgetreten</h3>';
}
} else {
// Fehler ausgeben
$error='<h3>Fehler bei der Eingabe</h3><p class="error">'.$error.'</p>';
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Form-Mailer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body {background:#fff;}
form {width:360px;}
label {display:block;}
input, textarea {font-size:11px;}
textarea {width:360px;height:240px;}
input.button {border:1px solid #000;background:#ffcc00;margin-top:12px;}
.fehler {border:1px solid red;}
p.error {color:red;}
#land {display:block; width:260px;}
</style>
</head>
<body>
<h1>Form-Mailer mit Reloadsperre</h1>
<?php
if($error!="") echo $error;
if(isset($_GET['success'])) {
//Erfolgsnachricht ausgeben
echo '<p>Vielen Dank für Ihre Nachricht. Sie wurde erfolgreich verschickt.</p><p><a href="formmailer.php">Zurück</a></p>';
} else {
// Form ausgeben
?>
<form action="<?php echo $pagename;?>" method="post" name="formmailer">
<fieldset><legend>Anmeldung</legend>
<label for="username">Benutzername</label>
<input type="Text" value="<?php echo $username;?>" maxlength="60" size="50" name="username" <?php if(isset($err[4])) echo 'class="fehler"';?>>
<label for="pass">Passwort</label>
<input type="Password" value="<?php echo $pass;?>" maxlength="60" size="50" name="pass" <?php if(isset($err[5])) echo 'class="fehler"';?>>
<label for="vorname">Vorname</label>
<input type="Text" value="<?php echo $vorname;?>" maxlength="60" size="50" name="vorname" <?php if(isset($err[0])) echo 'class="fehler"';?>>
<label for="nachname">Nachname</label>
<input type="Text" value="<?php echo $nachname;?>" maxlength="60" size="50" name="nachname" <?php if(isset($err[3])) echo 'class="fehler"';?>>
<label for="email">Email-Adresse</label>
<input type="Text" value="<?php echo $email;?>" maxlength="80" size="50" name="email" <?php if(isset($err[1])) echo 'class="fehler"';?>>
<label for="firm">Firma</label>
<input type="Text" value="<?php echo $firm;?>" maxlength="80" size="50" name="firm">
<label for="street">Straße</label>
<input type="Text" value="<?php echo $street;?>" maxlength="80" size="50" name="street" <?php if(isset($err[7])) echo 'class="fehler"';?>>
<label for="plz">PLZ</label>
<input type="Text" value="<?php echo $plz;?>" maxlength="80" size="50" name="plz" <?php if(isset($err[8])) echo 'class="fehler"';?>>
<label for="ort">Ort</label>
<input type="Text" value="<?php echo $ort;?>" maxlength="80" size="50" name="ort" <?php if(isset($err[9])) echo 'class="fehler"';?>>
<label for="land">Land</label>
<select name="land" id="land">
<option selected="selected" value="Deutschland">Deutschland</option>
<option value="Österreich">Österreich</option>
<option value="Schweiz">Schweiz</option>
</select>
<label for="telefon">Telefon</label>
<input type="Text" value="<?php echo $telefon;?>" maxlength="80" size="50" name="telefon" <?php if(isset($err[11])) echo 'class="fehler"';?>>
<label for="birth">Geburtsdatum (TT.MM.YYYY)</label>
<input type="Text" value="<?php echo $birth;?>" maxlength="80" size="50" name="birth" <?php if(isset($err[12])) echo 'class="fehler"';?>>
<label for="comment">Zusätzliche Informationen</label>
<?php $message = 'Hier können sie zusätzliche Informationen einfügen';?>
<textarea cols="10" rows="10" name="message" <?php if(isset($err[2])) echo 'class="fehler"';?>><?php echo $message;?></textarea>
<input type="reset" class="button" value="zurücksetzen" name="reset">
<input type="submit" class="button" value="abschicken" name="domail">
</fieldset>
</form>
<?php
}
function DebugAttack($s) {
//Hier den Pfad für die Protokolldatei einfügen, wenn kein Protokoll erwünscht ist, einfach auskommentieren
$fp=fopen("attack.txt","ab");
fwrite($fp,$s);
fclose($fp);
}
?>
</body>
</html>
Viel Spaß damit