Een eenvoudig PHP-contactformulier

Een contactformulier is vaak het eerste eigen PHP-script dat mensen maken. Het kan eenvoudig, maar er zijn een paar dingen die u niet mag overslaan.

Het formulier

<form method="post" action="verwerk.php">
  <label>Naam: <input type="text" name="naam" required></label>
  <label>E-mail: <input type="email" name="email" required></label>
  <label>Bericht: <textarea name="bericht" required></textarea></label>
  <input type="text" name="website" style="display:none">
  <button type="submit">Versturen</button>
</form>

Dat verborgen veld website is een eenvoudige spamval: mensen zien het niet, maar geautomatiseerde spamprogramma’s vullen het vaak wel in. Is het gevuld, dan negeert u de inzending.

De verwerking

<?php
if (!empty($_POST['website'])) { exit; }          // spamval

$naam    = trim($_POST['naam'] ?? '');
$email   = trim($_POST['email'] ?? '');
$bericht = trim($_POST['bericht'] ?? '');

if ($naam === '' || $bericht === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    exit('Vul alle velden correct in.');
}

$naar    = 'info@mijn-eigen-domeinnaam.nl';
$ondw    = 'Bericht via de website';
$inhoud  = "Naam: $naam\nE-mail: $email\n\n$bericht";
$headers = "From: website@mijn-eigen-domeinnaam.nl\r\nReply-To: $email";

mail($naar, $ondw, $inhoud, $headers);
echo 'Bedankt, uw bericht is verstuurd.';

De drie dingen die u niet mag overslaan

Controleer altijd de invoer. Vertrouw nooit wat er binnenkomt; filter_var controleert of het e-mailadres geldig is.

Zet uw eigen domein als afzender. Vult u het adres van de bezoeker in bij From, dan mislukt de SPF-controle en belandt uw eigen post in de spam. Gebruik daarvoor Reply-To, zoals hierboven.

Plaats nooit ongecontroleerde invoer in de headers. Dat is de klassieke route waarlangs een formulier misbruikt wordt om spam te versturen.

Komt uw formuliermail slecht aan, kijk dan naar het artikel over e-mail versturen via SMTP.


Was dit onderwerp nuttig voor U? Ja Nee