... was kann ich noch verbessern?
Dies ist mein erstes Script in php. Um keine bösen Überraschungen zu bekommen: Gibt es einen Fehler darin? EVA-PRINZIP eingehalten?
Für ein "Lectorat" wäre ich Dankbar....
Hier nun der Code:
Dies ist mein erstes Script in php. Um keine bösen Überraschungen zu bekommen: Gibt es einen Fehler darin? EVA-PRINZIP eingehalten?
Für ein "Lectorat" wäre ich Dankbar....
Hier nun der Code:
PHP:
<?php
//Beginn Formular
//zeitzone für Timestamp
date_default_timezone_set('Europe/Berlin');
// Formular - Beginn der verarbeitung
error_reporting(0);
if (isset($_POST['subject'])) {
// Variablen einrichten
// Für die Ermittlung der Zeitdifferenz gegen Bots
$time2 = time();
$time1 = $_POST['tstmp'];
$difTime = $time2-$time1;
// Fürs Datum der Nachricht....
$Datum = date("d.m.Y H:i");
// Datenarray
$daten = array();
//Eintrag der Felder, die keine PFLICHTFELDER sind
$feldausschluss = array('submit',
'email',
'repeat_email',
'subject',
'termin',
'termin2',
'epost',
'terms',
'land');
//Passe den Fehlertext hier an
$fehlerText = array('1' => 'PFLICHTFELD!',
'2' => 'eMail bitte überprüfen!',
'3' => 'Nur "A-Z", "0-9", "Punkt" und "-" sind erlaubt!',
'4' => 'Keine korrekte Telefon-Nr!',
'5' => 'PLZ - Bitte nur 4 od. 5 Zahlen!',
'6' => 'Maximale Länge überschritten!',
'7' => 'Datumformat nicht korrekt!');
// Weiterleitung
$url = array( 'ok' => 'http://www.hotelgasthof-zur-sonne.de/hotelzursonnedan.php',
'fehler' => 'http://www.hotelgasthof-zur-sonne.de/hotelzursonne-er.php');
// Globales Fehler-Array
$error = array();
//Schutz gegen XSS - gefunden im Web
foreach($_POST as $key => $value){
$daten[$key] = stripslashes(htmlspecialchars(str_replace(array("'",'"'), array('',''),trim(strip_tags($value)))));
}
unset($value);
//Ueberpruefung auf SPAM
if (!empty($daten['email']) ||
!empty($daten['subject']) ||
!empty($daten['repeat_email']) ||
isset($daten['terms']) ||
$difTime <= 30) {
//Skript wird hier beendet!
header("Location: ".$url['fehler']);
exit();
} else {
//Ueberpruefung der Pflichtfelder auf Inhalt
foreach ($daten as $key => $value) {
if (in_array($key, $feldausschluss)) {
continue;
} elseif (empty($value)) {
$error[$key] = $fehlerText[1];
}
} // Ende Foreach
unset($value);
// Ueberpruefung des Syntaxes
foreach ($daten as $key => $value) {
if (empty($value)) {
continue;
} else {
if ($key == 'vorname' ||
$key == 'nachname' ||
$key == 'strasse' ||
$key == 'land' ||
$key == 'ort' ||
$key == 'betreff') {
$error[$key] = strlen($daten[$key]) > 30 ? $fehlerText[6] : '';
$error[$key] = !preg_match("#^[a-zA-Z0-9äöüÄÖÜß \.\-]+$#", $daten[$key]) ? $fehlerText[3] : '';
} elseif ($key == 'plz') {
$error[$key] = !preg_match("/^[0-9]{4,5}$/", $daten[$key]) ? $fehlerText[5] : '';
} elseif ($key == 'tel') {
$error[$key] = preg_match('#[^0-9\+\-\040/]#', $daten[$key]) ? $fehlerText[4] : '';
} elseif ($key == 'termin' ||
$key == 'termin2') {
$error[$key] = !preg_match('/^\d{2}\.\d{2}\.\d{4}$/', $daten[$key]) ? $fehlerText[7] : '';
} elseif ($key == 'epost') {
...
} elseif ($key == 'nachricht') {
$error[$key] = !preg_match("#^[a-zA-Z0-9äöüÄÖÜß \r\n\.\-\"]+$#", $daten[$key]) ? $fehlerText[3] : '';
}
}
} // ende Foreach
unset($value);
} // ende ELSE
// Alle Daten vorhanden - Absendung ODER NEUANGABE
if (empty(array_filter($error))) {
$absendername = $daten['vorname'].' '.$daten['nachname'];
include_once 'PHPMailerAutoload.php';
$oMailer = new PHPMailer;
$oMailer->CharSet = 'UTF-8';
if (empty($daten['epost'])) {
$oMailer->FromName = 'KEINE EMAIL-ANGABE';
$oMailer->From = 'info@exemple.de';
} else {
$oMailer->FromName = $absendername;
$oMailer->From = $daten['epost'];
}
$oMailer->addAddress( 'info@exemple.de', 'Fam. Name' );
$oMailer->Subject = $daten['betreff'];
// Inhalt der E-Mail setzen
$Text = "Gesendet am: {$Datum} Uhr
PERSÖNLICHE DATEN:
Name: {$absendername}
Straße: {$daten['strasse']}
PLZ: {$daten['plz']}
Ort: {$daten['ort']}
Land: {$daten['land']}
E-Mail: {$daten['epost']}
Telefon: {$daten['tel']}
Terminwunsch: {$daten['termin']} bis {$daten['termin2']}
Betreff: {$daten['betreff']}
NACHRICHT:
{$daten['nachricht']}
";
$oMailer->Body = $Text;
// E-Mail senden und überprüfen ob diese richtig versandt wurde.
if (!$oMailer->send() ) {
header("Location: ".$url['fehler']);
exit();
}
header("Location: ".$url['ok']);
exit();
} else {
goto eingabe;
}
} else {
//Formular aufruf Einstiegspunkt
eingabe:
?>
<!DOCTYPE HTML>
<html lang="de">
...
<form class='formanizr' action='' method='post' autocomplete='off' novalidate="true">
<section class='formanizr fzr_tiny'>
<fieldset>
<legend>Anfrage an Hotel zur Sonne</legend>
<fieldset>
<legend>Ihre Daten</legend>
<div class='fzr_row'>
<div class='fzr_col fzr_6'>
<label for='vorname'>Vorname:</label>
<input type='text' name='vorname' id='vorname' minlength='2' value='<?php echo !empty($daten['vorname']) ? htmlspecialchars($daten['vorname'], ENT_QUOTES) : ''; ?>' placeholder='Pflichtfeld' pattern='\D+' tabindex="1" />
<div class='fehler'>
<h4><?php echo $error['vorname'] ?></h4>
</div>
</div>
... usw.
<?php
} // Ende Submit
?>
</body>
</html>