• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Absendeformular PHP....

romacasa

Neues Mitglied
... 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:
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 = '[email protected]';
                    } else {
                        $oMailer->FromName = $absendername;
                        $oMailer->From = $daten['epost'];
                    }
                    
                    $oMailer->addAddress( '[email protected]', '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>
 
Werbung:
ergenzend zu epost - da nur 1000 Zeichen erlaubt sind.....
PHP:
elseif ($key == 'epost')
$error[$key] = !preg_match('^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$', $daten[$key]) ? $fehlerText [2] : '';
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
und wenn die Länge besprochen ist, kann man es kürzen? Soll man es kürzen? Mir liegt was an der Sicherheit.... Und bin lernwillig.... Danke nochmals
 
Ich würde die input tags noch mit required ergänzen. Das kann man zwar umgehen (also unbedingt im PHP beibehalten) allerdings muss der Normal-Nutzer nicht erst submitten um zu sehen, dass er etwas vergessen hat.
 
Werbung:
Zurück
Oben