Mailform i PHP: Sikre at mail ikke sendes igen ved refresh
Hej eksperterJeg har lavet en mailform i php, denne forsøger jeg at sikre imod at nogle skulle synes det var sjovt at trykke refresh et antal gange og derved sende mailen det antal gange.
Jeg har forsøgt at unset($action) hvor action er et hidden inputfelt der bestemmer om formen skal udskrives eller om der skal sendes en mail.
Jeg har ligeledes forsøgt mig med en session-variable der sættes når mailen er sendt og derved ikke tillader at mailen sendes igen. Men dette synes jeg også giver nogle problemer, hvis f.eks brugeren trykker tilbage og ændrer i felterne og sender mailen igen bliver den ikke sendt. Jeg ville helst at alt blev unset, altså hele $_POST og alle variablerne. Men hver gang jeg trykker refresh får de værdierne igen.
Hvordan sikrer jeg bedst at en eller anden tosse ikke let kan sende den samme mail 400 gange uden at generere alt for mange normale brugere?
Udsnit af kode indsat.
<?php
$action = $_POST['action'];
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$subject = $_POST['subject'];
$message = $_POST['message'];
if(!$action){
unset($_SESSION['email']);
echoform("","","");//udskriver form.
} elseif((!$name || !$email || !$message)) {
if(!$name)
$nameError = "error";
if(!$email)
$emailError = "error";
if(!$message)
$messageError = "error";
echoform("$nameError", "$emailError", "$messageError");
//udskriver hele formen med fejlbeskeder.
echo "<br />Alle felter med rødt skal udfyldes.";
} else {
if(!$_SESSION['email']){
mail('xxxxx@xxxxx.dk',$subject,$message,"From: $name <$email>");
$_SESSION['email'] = true;
} else {
echo "Din email er allerede sendt,<br />";
echo "Gå til <a href='kontakt.php'>kontakt</a> for at sende en ny mail.";
}
}
