Annons:
Etikettphp-mysql
Läst 9199 ggr
MichaelE
2012-09-17 23:43

Skapa kontaktformulär i PHP

Att skapa ett fungerande kontaktformulär är enkelt, men det kan skapa problem med det svenska språket. I denna artikel kommer jag visa hur man skapar ett formulär som kan hantera åäö utan problem.

Det enklaste att skicka ett mejl med hjälp av php är följande:

Men det finns problem med denna enkla kod, det klarar inte av att skicka tecken som åäö.

Grundfunktionen hos linux servrarna är att skicka enbart de 128 första teckena i ASCII-tabellen och där inkluderas inte åäö. Även om de flesta servrar idag klarar av att skicka mejl som innehåller alla de 191 tecken ur den utökade ASCII-tabellen (ISO Latin-1) så används ändå den mindre tabellen.

För att kunna skicka ett mejl från ett kontaktformulär med svenska tecken så måste man lägga till ett attribut i mail, nämligen headers enligt följande:

Här nedan kommer jag genomgående skapa ett fomulär som kommer skicka meddelandet korrekt till din inkorg.

Först måste vi skapa självaste formuläret (som skrivs i en passande html fil som contact.html):

Namn:

        Ämne:

        e-mail:
      Meddelade:
       
         

Detta formulär innehåller enbart namn, ämne, mejl samt självaste meddelandet. Ur säkerhetssynpunkt används POST som döljer informationen som skickas.

I självaste filen mailer.php börjar vi med att skriva den kod som hämtar informationen som hämtas från formuläret.

$name = utf8_decode($_POST['name']);
$subject = utf8_decode($_POST['subject']);
$email = $_POST['email'];
$message = utf8_decode($_POST['message']);
$to = "din@adress.com";

utf8_decode() konverterar texten till att vara kompitabel med den utökade ASCII-tabellen.

För att skapa headers behövs följande kod, denna är viktig annars kommer inte åäö att fungera trots konverteringen ovan.

$headers = "From: " . $name ." <". $email ."> \n"; $headers .= "MIME-version: 1.0\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
$headers .= "Content-transfer-encoding: 8bit\n";

Nu har vi skapat de två viktigaste delarna i koden och bör sätta ihop alltihopa till en enda kod:

0 && strlen($subject) > 0 && strlen($email) > 0 && strlen($message) > 0) { $headers = "From: " . $name ." <". $email ."> \\n"; $headers .= "MIME-version: 1.0\\n"; $headers .= "Content-type: text/plain; charset=iso-8859-1\\n"; $headers .= "Content-transfer-encoding: 8bit\\n"; if(mail($to, $subject,$message,$headers)) { header("Location: /success.html"); exit(); } else { header("Location: /failure.html"); exit(); } } else { header("Location: /failure.html"); exit(); } ?>

Denna kod kontrollerar ifall alla fält är ifyllda och skickar användaren till en felsida (se header("Location:") i koden). Om mail lyckas skickas användaren till en sida som säger att mejlet skickades problemfritt, annars skickas denne person till felsidan.

Nu kan du emot meddelanden från din hemsida utan att oroa över att få konstiga tecken pga åäö.

Uppdaterad: 2012-09-29

Annons:
thenameless
2012-09-27 21:25
#1

Hej MichaelE

Ska mailer.php vara en separat fil? precis som man ibland kan göra med css?

Eller skrives allt i samma fil?

Och vart sätter man headers någonstans?

De verkar inte finnas i ditt fullständiga "mailer.php"?

Det vore bra om du kunde uppfdatera din tutorial med dessa detaljer. Vi (jag) som är nvis opå php behöver strikta instruktioner.

All that is left are memories, and the pieces of a shattered existence….

MichaelE
2012-09-27 21:39
#2

mailer.php är en separat fil. Headers finns där, läs sista kodstycket.

thenameless
2012-09-28 01:28
#3

OPkej tack jag testar det

All that is left are memories, and the pieces of a shattered existence….

[Fibbe]
2012-09-28 14:54
#4

Bra artikel!

Men varför använder du meta-taggen istället för att skicka till annan sida via header?;

if(mail($to, $subject,$message,$headers)) {
header("Location: /success.html");
exit();

else {
header("Location: /failure.html");
exit();
}

Då slipper webbservern exekvera resten av koden och webbläsaren slipper rendera html-koden.

MichaelE
2012-09-28 15:18
#5

Tack, jag har letat efter sån kod men har inte hittat det. Då kommer jag uppdatera det när jag har kommit hem från jobbet.

MichaelE
2012-09-29 11:31
#6

Uppdaterat! Tack för tipset.

Annons:
thenameless
2012-10-05 20:46
#7

I mailer.php, Ska det inte vara en sluttagg där? som i html?

typ ?

Jag är nybörjare i php detta är t om det första jag gör i php så därför min förvirring.

All that is left are memories, and the pieces of a shattered existence….

MichaelE
2012-10-05 21:36
#8

Nej, php skiljer från html.

Man skriver enligt följande:

thenameless
2012-10-21 01:04
#9

Okej jag testade formuläret hade lagt upp det på min hemsida.

- Lagt mailer i mappen tillsammans med sidan.

- Provade att fylla i och skicka.fick upp det i oulook

- Skickade igen

Fick detta "Felmeddelande" Som bara ser ut som koden?

**<?php

$name = utf8_decode($_POST['name']);
$subject = utf8_decode($_POST['subject']);
$email = $_POST['email'];
$message = utf8_decode($_POST['message']);
$to = "sjoberg_bjorn@glocalnet.net";

if(strlen($name) > 0 && strlen($subject) > 0 && strlen($email) > 0 && strlen($message) > 0) {
$headers = "From: " . $name ." <". $email ."> \n"; $headers .= "MIME-version: 1.0\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
$headers .= "Content-transfer-encoding: 8bit\n";

if(mail($to, $subject,$message,$headers)) {
header("Location: /success.html");
exit();
}
else {
header("Location: /failure.html");
exit();
}
}
else {
header("Location: /failure.html");
exit();
}
?>**

Så där ser du kanske vad jag gjort fel?

All that is left are memories, and the pieces of a shattered existence….

MichaelE
2012-10-21 03:15
#10

Du måste ha filändelsen php för den koden.

thenameless
2012-10-22 00:50
#11

Ja då den är döpt till mailer.php och ligger i samma mapp som contact.html som jag döpte kontaktformuläret till på min serverplats.

All that is left are memories, and the pieces of a shattered existence….

thenameless
2012-10-22 21:36
#12

Här e en länk till min sida jag testat den på:  http://goto.glocalnet.net/sjoberg_bjorn/contact.html

Där har du html formuläret och scriptet ser ni ju ovan.

All that is left are memories, and the pieces of a shattered existence….

MichaelE
2012-10-22 22:11
#13

Det beror på att ditt webbhotell inte stödjer php. Du måste ha ett eget domän hos One, Binero etc.

Så tyvärr så kan du inte använda denna kod.

Annons:
thenameless
2012-10-22 23:02
#14

aha tack för svaret. Jag hade missat det. de stödjer inte heller annat jag försökt med chattar. Jag får helt enkelt byta…..

All that is left are memories, and the pieces of a shattered existence….

Perly
2012-10-24 17:50
#15

Bra artikel/inlägg, informationen om detta är på många andra sidor väldigt luddig Glad

Alltid Oavsett

thenameless
2012-10-24 23:06
#16

Sant jag visste inte tidigare att glocalnet stängde av vissa funktioner på sina kundservrar.  Fick reda på det när jag ringde för att få support när min cgi-bin inte ville fungera för messageboards och liknande. Då da de att de stängt av den funktionen. Stor mening att låta folk lägga upp hemsidor om det enda man kan lägga upp är test och bilder….

All that is left are memories, and the pieces of a shattered existence….

MichaelE
2012-10-25 11:08
#17

#15 Tackar Skrattande. Jag håller med dig, även guiden på webbdesignskolan är helt värdelös. Denna kod lyckades jag sätta ihop med hjälp av böcker och flertalet forumtrådar. När jag väl var klar och såg att det fungerade så pass bra så bestämde jag mig för att dela med mig.

Perly
2012-10-25 11:16
#18

#17 Jo har själv varit inne på webbdesignskolan flera gånger o kollat utan någon framgång men nu borde jag kunna lyckas så tack för att du delar med dig Glad

Alltid Oavsett

MichaelE
2012-10-25 13:29
#19

#18 Det var så lite så Skrattande

LinneaChristina
2012-11-14 13:17
#20

Bra artikel!

Jag skulle behöva info om hur man styr så att en viss användare (IP-nummer?) bara kan skicka ett visst formulär en gång under en viss tidsperiod. Någon som vet hur man gör eller var jag kan hitta infon jag behöver?

//Linnea

Välkommen att titta in på min blogg!

Annons:
MichaelE
2012-11-15 00:06
#21

#20 Tackar.

Min största fråga är varför? Detta kan skapa en negativ effekt ifall det blev fel vid skickandet och användaren försöker skicka om så kan den inte göra det utan måste vänta en viss tid.

[Fibbe]
2012-11-15 09:30
#22

#20

Det går att lösa enklast med en databas. Det går även att lösa med cookies om det enbart är dubbelpost du vill hindra.

#21

Det gäller ju bara att hindra användaren från efter att allt är skickat korrekt så borde det inte vara ett problem.

MichaelE
2012-11-15 09:47
#23

#22 Enklast är väl med session?

$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

[Fibbe]
2012-11-15 09:57
#24

#23

Sessioner bygger på cookies

LinneaChristina
2012-11-15 10:59
#25

Tack båda! Det gäller en enkät, som genererar en rabattkod som tack när man fyllt i den. Vill inte att någon utnyttjar det och fyller i flera gånger för att få fler rabattkoder.

Det stör mig att jag aldrig lärt mig använda cookies… Är det svårt att lära sig?

//Linnea

Välkommen att titta in på min blogg!

[Fibbe]
2012-11-16 13:45
#26

#25

Då är det databas som gäller!

Cookies är förövrigt väldigt lätt med de flesta webbspråk!

Upp till toppen
Annons: