Kontaktformulär med PHP
Förord
PHP kan enkelt användas till utskick av epost. I denna artikel kommer jag visa hur man enkelt gör ett meddelandeformulär. Om det är något du inte förstår kan du läsa "En introduktion till PHP" av Jonas Lundqvist här på pellesoft.Innehåll
»»
»
»
Relaterade artiklar
» En introduktion till PHP - del 1» En introduktion till PHP - del 2
» En introduktion till PHP - del 3
PHP och epost
PHP har en inbyggd funktion för epost som heter mail(). Vi testar att dra över ett mail!Skapa en fil och döp den till valfritt namn och lägg upp den på servern.
$to = "john.doe@example.com"; //vem meddelandet ska till
$subject = "Hello World!"; //ämne
$message = "Hello\nWorld!"; //meddelandet i sig \n = new line, radbyte det vill säga
if (mail($to, $subject, $message)) //vi försöker skicka iväg mailet
{
echo "inga problem uppstod!";
}
else
{
echo "problem uppstod!";
}
?>
Öppna filen i webbläsaren. Om det står "inga problem uppstod!", grattis.
Två troliga skäl till att det inte lyckades:
- Kör du från ett webbhotell så tillåts inte epostutskick troligen.
- Om du kör från egen server behöver php.ini konfigureras. I php.ini vid SMTP = localhost, ska localhost bytas ut mot din internetleveratörs SMTP (detta förutsätter att du använder Windows, fungerar annorlunda under *nix). Om du har Telia ska det bytas ut mot smtprelay1.telia.com till exempel.
Skapa ett formulär
Vi vill att meddelandet ska skickas genom ett formulär.
if (isset($_POST['message']))
{
$to = "john.doe@example.com"; //vem meddelandet ska till
$subject = strip_tags($_POST['subject']); //ämne
$message = $_POST['message']; //meddelandet i sig \n = new line, radbyte det vill säga
if (mail($to, $subject, $message)) //vi försöker skicka iväg mailet
{
echo "Ditt meddelande skickades!";
}
else
{
echo "Problem uppstod!";
}
}
?>
Även om vi har ett mycket enkelt kontaktformulär saknas mycket fortfarande. Vi kan inte se vem som sänt eller vem som det ska hamna hos om vi använder "svara" i mailklienten.
lite mer avancerade mail + validering av variabler
Av många anledningar är det dumt att skicka mail som i exemplet ovan. Vi vet inte vem som skickat eller vem vi ska svara till.
Genom att använda en tredje parameter på mail() kan vi specifiera såkallade headers.
if (isset($_POST['message']))
{
$to = "john.doe@example.com"; //vem meddelandet ska till
$subject = strip_tags($_POST['subject']); //ämne
$from = strip_tags($_POST['mail']); //mail
$message = $_POST['message']; //meddelandet i sig \n = new line, radbyte det vill säga
$headers = "From: $from <$from>\r\n" . //vem mailet är ifrån
"Reply-To: $from\r\n" . //vem vid ska svara till
"X-Mailer: PHP/" . phpversion(); //vilken klient som använts när mailet skickades
if (mail($to, $subject, $message, $headers)) //vi försöker skicka iväg mailet, notera att $headers har lagts till
{
echo "Ditt meddelande skickades!";
}
else
{
echo "Problem uppstod!";
}
}
?>
Nu kan vi veta vem som skickat mailet och även kunna svara på detta. Just nu kan man dock skriva vad som helst under namn, även en icke giltig address. Fält kan dessutom lämnas tomma. För att lösa detta så lägger vi till validering av alla variabler.
if (isset($_POST['message']))
{
$to = "john.doe@example.com"; //vem meddelandet ska till
$subject = strip_tags($_POST['subject']); //ämne
$from = strip_tags($_POST['mail']); //mail
$message = $_POST['message']; //meddelandet i sig \n = new line, radbyte det vill säga
$headers = "From: $from <$from>\r\n" . //vem mailet är ifrån
"Reply-To: $from\r\n" . //vem vid ska svara till
"X-Mailer: PHP/" . phpversion(); //vilken klient som använts när mailet skickades
$errors = ''; //ger fel om man försöker förlänga en sträng som inte "existerar". Går alternativt
//sätta @ framför $errors vilket stänger av PHPs felrapportering vid just den "händelsen"
//börja validering
if (strlen($message) <= 20) //kolla längden av meddelandet
$errors .= "Ditt meddelande är för kort
"; //.= menar förlängning, alltså '' + "Ditt meddelande är för kort"
if (strlen($subject) <= 2 or strlen($subject) >= 50) //kolla längden av ämnet
$errors .= "Ditt ämne är för kort eller för långt
";
//kolla om mailaddressen är giltig, detta görs genom regular expressions vilket definitivt är överkurs
if (!eregi("^[\x20-\x2D\x2F-\x7E]+(\.[\x20-\x2D\x2F-\x7E]+)*@(([a-z0-9]([-a-z0-9]*[a-z0-9]+)?){1,63}\.)+[a-z0-9]{2,6}$", $from))
$errors .= "Mailaddress ej giltig
";
if (strlen($errors) == 0) //om errors strängen är 0 tecken har 0 fel påträffats, mailet kan skickas iväg
{
if (mail($to, $subject, $message, $headers)) //vi försöker skicka iväg mailet, notera att $headers har lagts till
{
echo "Ditt meddelande skickades!";
}
else
{
echo "Problem uppstod!";
}
}
else
echo $errors;
}
?>
Vi har nu ett fungerade formulär!
0 Kommentarer