jeg undre mig over ln 33
if($_POST[name] && $_POST[email] && $_POST[subject] && $_POST[message]){
ud over der mangler plinger, så det du gerne vil teste er om felterne er tomme eller ej, for felterne bliver sendt med over da de har et name attribut i formen der submittes.
du bør også teste om mailaddressen er valid, feks med et regulært udtryk
kig feks på dette link
https://www.developphp.com/page.php?id=224det er fint med client side validering, men der skal ALTID serverside valideres.
jeg tror jeg ville lave noget ala
(utested)
<div class="form-group">
<?php
if (isset($_POST['send'])) {
$errors = 0;
$subject = $_POST['subject'];
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
// test om variablerne er tomme
if (empty($email)) {
// normalt ligger jeg beskeden i et array
echo "mail addressen må ikke være tomt";
$errors++;
} else {
// test om email er valid
// https://www.developphp.com/page.php?id=224
$regex = "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$";
if (!preg_match($regex, $email)) {
echo $email . " er en ulovlig mail addresse.";
$errors++;
}
}
if (empty($subject)) {
echo "emne må ikke være tomt";
$errors++;
}
if (empty($name)) {
echo "navnet må ikke være tomt";
$errors++;
}
if (empty($message)) {
echo "Beskeden må ikke være tom";
$errors++;
}
// her kunne komme yderligere test
if ($errors == 0) {
$result = mail("support@******.dk", $subject, "Besked via kontakt siden\\nFra: $name \\n\\nBeskeden:\\n$message", "From: $email\\nReply-to: $email");
if (!$result) {
echo "fejl i mail afsendelse";
} else {
echo "Din besked er blevet sendt..";
}
} else {
// her kunne man lave en samlet udskrivning af fejlene, hvis man istedet for at udskrve længere oppe bare lagde dem i et array, så udskrive arayet her
}
}
?>
<label for="name">
Navn</label>
<input type="text" name="name" class="form-control" id="name" placeholder="Skriv navn" required="required" />
</div>
overvej at bygge din mail op efter skabelonen
http://php.net/manual/en/function.mail.phpExample #2 Sending mail with extra headers.
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
eller anvend functionen mail_utf8 af
pavel.lint at vk.com, der ligger som kommentar på
http://php.net/manual/en/function.mail.php
function mail_utf8($to, $from_user, $from_email, $subject = '(No subject)', $message = ''){
$from_user = "=?UTF-8?B?".base64_encode($from_user)."?=";
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
$headers = "From: $from_user <$from_email>\r\n".
"MIME-Version: 1.0" . "\r\n" .
"Content-type: text/html; charset=UTF-8" . "\r\n";
return mail($to, $subject, $message, $headers);
}
olebole har lavet en tilsvarende function på eksperten.dk som jeg selv anvender
ref
http://www.eksperten.dk/spm/961816 #3
function escapeAddr($addr) {
$check = preg_match('/(.*)<(.*)>/', $addr, $a);
if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
return $addr;
}
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='', $type='plain') {
$from = escapeAddr($from);
$header = 'From: '.$from.PHP_EOL
. 'Return-Path: '.$from.PHP_EOL
. 'Reply-To: '.$from.PHP_EOL
. 'MIME-Version: 1.0'.PHP_EOL
. 'Content-type: text/'.$type.'; charset=UTF-8'.PHP_EOL
. 'X-Mailer: PHP/'.phpversion().PHP_EOL
. 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
$header .= PHP_EOL;
return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}