loschke
2/3/2020 - 10:42 PM

Blog - Formular Spamschutz und Validierung – Spam Emails verhindern ohne Captcha

<form id="phpform" method="post" action="kontakt.php"  autocomplete="off">

<p><label for="name">Name</label>
<input type="text" name="name" value=""></p>

<p><label for="email">Email</label>
<input type="text" name="email" value=""></p>

<p><label for="message">Nachricht</label><br />
<textarea name="message" rows="8"></textarea></p>

<p><input type="checkbox" name="human"> Ich versende keinen Spam</p>

<p><input type="submit" name="submit" value="Absenden"></p>

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>          
</form
CSS Code
<style>
  .terms { display:none; }
</style>

<div class="terms">
  Folgende Felder bitte unberührt lassen!
  <input type="checkbox" name="terms">
</div>
<input type="text" name="repeat_email" />
<script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$('.terms').append('<input type="text" name="repeat_email" />');
});
</script>
<noscript>Bitte aktivieren Sie Javascript zum Absenden des Formulars oder 
nutzen Sie eine der alternative Kontaktmöglichkeiten unter www.domain.de/kontakt.htm</noscript>
<?php
$errors = array();

//Prüfen ob Formular abgesendet
if(isset($_POST['submit'])) {

	//Spamcheck mit jedem neuem Absenden zurücksetzen
	$spamcheck = false; 

	//Spamcheck
	if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) {
		$errors[] = "Zusatzfelder wurden ausgefüllt, wir vermuten Spam und brechen hier ab.";	
	} else {
		$spamcheck = true;
	}

	// Eingaben Validieren
	if($spamcheck == true) {	

		if(empty($_POST['name'])) { //Wenn Name leer
			$errors[] = "Bitte geben Sie Ihren Namen an";
		}

		if(empty($_POST['email'])){ //Wenn Email leer
			$errors[] = "Bitte Emailadresse angeben";
		} elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) { //Emailformat überprüfen ab PHP 5.2
			$errors[] = "Bitte geben Sie ein gültige Emailadresse an";
		}

		if(empty($_POST['message'])){ //Wenn Nachricht leer
			$errors[] = "Bitte geben Sie Ihre Nachricht ein";
		}

		if(!isset($_POST["gender"])){ //Wenn Spamcheck nicht markiert
			$errors[] = "Bitte bestätigen Sie den Spamcheck";
		}		

	}

    if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) {
        // Spamtest bestanden, alle erforderlichen Felder richtig ausgefüllt
	// Eintrag in Datenbank oder Email Versand
	echo "Alles richtig gemacht";
    }

}
?>
<?php if(isset($_POST['submit']) && empty($errors) == false) {?>
   <div style="background:#FCC">
      <strong>Bitte überprüfen Sie Ihre Angaben!</strong><br />
      <?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; ?>
   </div>
<?php } ?>