62 besökare online
Drömvävaren webbshop
5 kunder online

PHP MySQL

 

 

Prova funktionerna i ett Formmail-script

Klicka här för att prova exemplet nedan Öppnas i nytt fönster (Open in new window) 

OBS! Inga uppgifter sparas och formulärinnehållet skickas inte någonstans. Du kan prova att skicka meddelandet flera gånger och testa gärna att utelämna information i vissa fält. Prova att ange en ogiltig epostadress för att testa om Formmail kontrollerar att fälten verkligen är ifyllda och att en korrekt epostadress används.


Den här guiden visar hur du använder funktionen MAIL och skickar formulärdata till en epostadress. Dessutom visas hur du kontrollerar ditt formulär med enkel validering av att formulärfälten är ifyllda och validering av epostadresser med PREG_MATCH och REGEXP. Med HTTP_REFERER och SESSIONS kontrollerar du att Formmail skickas från just ditt formulär för att undvika att formuläret spammas. Dessutom används GET_MAGIC_QUOTES_GPC tillsammans med STRIPSLASHES för att kunna använda citationstecken och backslash som tecken i formulärfälten.

 

Förutsättningar för att följa guiden

För att du ska kunna följa denna guide förutsätter vi att du har grundkunskaper i PHP motsvarande guiden PHP grunder » och PHP fortsättning »

OBS! Om du inte konfigurerat och använder din egen dator som webbserver med mailfunktionerna aktiverade kan du INTE testa dina PHP-sidor lokalt. Du måste då publicera och testa filerna online på din webbserver med PHP-stöd när du använder exemplen i denna guide.

För att mailfunktionerna i PHP ska fungera måste din webbserver ha tillgång till ett mailprogram som tex Sendmail, Qmail eller Postfix.

Kolla din PHP-info (se guiden phpinfo » ) om din webbserver online (inte den lokala webbservern) har sökvägen (Path) angiven till Sendmail:

 

TIPS! Om du får problem med att använda exemplen i den här guiden kanske du hittar en lösning i guiden Felsökning i PHP och MySQL »

 

 

Skicka mail med funktionen MAIL i PHP

Att skicka mail med PHP är relativt enkelt när du använder funktionen MAIL där du anger mottagarens epostadress, ämnesrubrik (subject) och själva meddelandetexten som parametrar:

<?php

mail("your@adress.com", "
Ämne här", "Meddelandetexten här");

?>

Testa gärna din mailfunktion med koden ovan!

Ange din egen e-postadress och spara dokumentet med namnet "mail.php". Kör filen på din webbserver online och kolla om du får mailet i ditt vanliga epost-program så ser du om mailfunktionerna är korrekt installerade.
Läs mer om funktionen MAIL hos PHP.net Öppnas i nytt fönster (Open in new window) 

 

 

Formulär för att skicka meddelandet

Du kan använda ett vanligt formulär för att skicka informationen direkt till en e-postmottagare. I exemplet nedan används två PHP-dokument, ett för formuläret och ett för koden som bearbetar innehållet i formuläret. Den sida som bearbetar formulärdatan fungerar också som en bekräftelsesida där den skickade informationen visas.

Läs mer om formulär i guiden PHP fortsättning »

OBS! Använd inte formuläret i detta avsnitt på riktigt! Exemplet fungerar bara som en introduktion till formulärscript och du kan alltså testa det själv men inte använda det "på riktigt" innan du validerat uppgifterna enligt nästa avsnitt.

 

  1. Skapa ditt formulär och spara det med namnet "kontaktform.php":



    Här är koden till formuläret ovan:

    <html>
    <head>
    <title>
    Kontakt</title>
    </head>
    <body>
    <h2>
    Kontakta oss </h2>

    <form name="
    kontakt" method="post" action="formmail.php">
    Namn:<br>
    <input name="name" type="text" size="30">
    <br>
    Ämne:<br>
    <input name="subject" type="text" size="30">
    <br>
    email:<br>
    <input name="email" type="text" size="30">
    <br>
    Meddelande:<br>
    <textarea name="message" cols="30" rows="5"></textarea>
    <br>
    <br>
    <input name="submit" type="submit"
    value="
    Skicka meddelandet">
    </form>

    </body>
    </html>

    Klicka här för att se en textfil med koden till exemplet
     Öppnas i nytt fönster (Open in new window) 

  2. Filen "formmail.php" sparar informationen från formulärfältet som variabler. I den första variabeln $to anger du e-postadressen till mottagaren. De övriga variablerna hämtar den information som anges i formulärfälten.

    I funktionen MAIL anges som de tre första parametrarna de variabler som innehåller uppgifterna för mottagare, ämnesrubrik och själva meddelandet. Den fjärde parametern innehåller information om vem som är avsändaren av meddelandet. Genom att ange de båda variablerna $name och $from som så kommer både namnet på avsändaren och epostadressen att visas när mailet läses i epost-programmet. Den fjärde parametern i funktionen MAIL kan användas för meddelandets huvud (message header) och vi förklarar mer om detta i avsnitten nedan.

    De uppgifter som angivits i formuläret skrivs ut med funktionen ECHO och för radbrytning används funktionen NL2BR (läs mer om radbrytning i guiden PHP fortsättning  »)

    Här är koden till "formmail.php":

    <?php

    $to = "your@mailaddress.com";
    $from = $_POST["email"];
    $subject = $_POST["subject"];
    $name = $_POST["name"];
    $message = $_POST["message"];

    if (mail ($to, $subject, $message ,"From: $name <$from>"))

    echo nl2br("<h2>
    Ditt meddelande har skickats!</h2>
    <b>
    mottagare:</b> $to
    <b>
    ämne:</b> $subject
    <b>
    meddelande:</b>
    $message
    ");

    else
    echo "
    Det gick inte att skicka ditt meddelande";

    ?>

  3. Prova att skriva in information i alla fält i ditt formulär. I exemplet nedan har information skrivits i fälten "name", "subject", "email" och "message". Det är samma namn som används till variablerna i koden ovan och informationen lagras i de angivna variablerna:



    När formuläret skickats skrivs informationen ut som en bekräftelse:



  4. Kolla mailet i ditt e-postprogram! Här visas det emottagna meddelandet i Outlook Express:



    Notera att avsändarens namn visas i raden "Från:" vilket är resultatet av att:

    "From: $name <$from>"

    använts i funktionen MAIL.

    Om vi tittar närmare på mailet med menyn "Arkiv/Egenskaper" och fliken "Information" så ser vi att den angivna informationen i MESSAGE HEADER visar avsändarens namn och e-postadress som vi angav som den fjärde parametern i funktionen MAIL (se punkt 2 ovan):

 

 

Enkel validering av formuläret

Validering av innehållet i formuläret är viktigt! Det finns en viss risk att ditt formulär och ditt formmail-script blir spammat av någon spambot (spam robot). Anledningar till att spamma formulär är desamma som att spamma e-postadresser, målet är att sprida annonser och andra "erbjudanden". Dessutom vill spammarna lägga ut sina länkar (URL) i forum, gästböcker och bloggar för att hamna högre i rankingen hos sökmotorer som tex Google.

Du kan inte stoppa spam till 100% men du kan utföra åtgärder som minskar attackerna. En vanlig metod idag är att använda en verifieringsbild istället för vanlig text, en sk Captcha (robotfälla) vid inloggning till olika tjänster. Captchas används nu tyvärr även av spammare för att förhindra att ditt antispamprogram använder OCR för att hitta textinformation som är vanlig i spam. Läs mer om Spambots Öppnas i nytt fönster (Open in new window)  och Captcha Öppnas i nytt fönster (Open in new window)  hos Wikipedia.

Läs mer i guiden Formmail med CAPTCHA » om hur du kan använda dina egna captcha i ditt formulär.

Du kan validera ditt formulär med de två metoderna clientside och serverside. När du validerar clientside används vanligen Javascript som direkt i webbläsaren kontrollerar innehållet i formuläret. Den här metoden är ibland snabbare än att använda serverside validering med PHP eftersom ingen information skickas mellan användaren och webbservern när valideringen genomförs. Nackdelen med Javascript är att vissa användare stängt av användning av Javascript i sin webbläsare och att olika webbläsare kan behandla koden olika. Validering serverside med PHP är en säkrare metod och du kan använda båda metoderna för att säkerställa att någon av valideringarna genomförs.

Vi har valt att använda validering serverside med PHP. I det här avsnittet visas hur du kan använda en enkel validering för att kontrollera att innehåll har angivits i de formulärfält du vill att användaren ska fylla i innan formuläret skickas. Här kontrolleras inte om innehållet är korrekt och att giltiga e-postadresser och URL:er angivits och detta visas istället i nästa avsnitt.

  1. Vi placerar koden som kontrollerar om information angivits i formulärfälten i "formmail.php" (samma dokument som bearbetar formuläret).

    Fältnamn som inte är ifyllda sparas här i en variabel med namnet $errors och placeras i en array. De eventuella fel som sparats i vektorn skrivs ut med funktionen FOREACH och visas tillsammans med texten du angivit. För att användaren inte ska behöva backa med webbläsarens "bakåt-knapp" har vi lagt till:
    javascript:history.go (-1)

    Här är koden till "formmail.php":

    <?php

    // anger en variabel som kan lagra de eventuella felaktigheterna
    $errors = array();

    // kontrollera om ett Namn angivits
    if (!$_POST["name"])
    $errors[] = "
    - ditt namn";

    // kontrollera om ett Ämne angivits

    if (!$_POST["subject"])
    $errors[] = "
    - ärende i ämnesraden";

    // kontrollera om en e-postadress angivits

    if (!$_POST["email"])
    $errors[] = "
    - din epostadress";

    // kontrollera om ett Meddelande angivits

    if (!$_POST["message"])
    $errors[] = "
    - inget meddelande har skrivits!";

    // om felaktig information finns visas detta meddelande

    if (count($errors)>0){
    echo "<strong>
    Följande information måste anges innan du kan skicka formuläret:</strong><br />";

    foreach
    ($errors as $error_message)
    echo "$error_message <br />";
    echo "<br />
    Ange den information som saknas och skicka formuläret igen. Tack! <br />";
    echo "<a href='javascript:history.go(-1)'>
    klicka här för att komma tillbaka till formuläret</a>";
    }

    else {

    // formuläret är korrekt ifyllt och informationen bearbetas
    $to = "your@mailaddress.com";
    $from = $_POST["email"];
    $subject = $_POST["subject"];
    $name = $_POST["name"];
    $message = $_POST["message"];

    if (mail($to, $subject, $message ,"From: $name <$from>"))
    echo nl2br("<h2>
    Ditt meddelande har skickats!</h2>
    <b>
    mottagare:</b> $to
    <b>
    ämne:</b> $subject
    <b>
    meddelande:</b>
    $message
    ");

         else
         echo "
    Det gick inte att skicka ditt meddelande";
    }

    ?>

    Klicka här för att se koden till exemplet ovan Öppnas i nytt fönster (Open in new window) 

  2. Vi provar att skicka formuläret utan att ange en epostadress:



    ...och felmeddelandet visas tillsammans med en "tillbaka-länk":



    ...om formuläret skickas helt tomt visas alla felmeddelanden enligt vår validering:

 

 

Validering av e-postadresser med PREG_MATCH

Den enkla valideringen i avsnittet ovan kan vara tillräcklig om du bara vill säkerställa att vissa fält verkligen är ifyllda. Om du däremot har behov av att den angivna informationen verkligen är korrekt kan du använda regular expressions (reguljära uttryck).

I detta avsnitt visas hur du använder reguljära uttryck för att kontrollera att e-postadresser är giltiga. Ett reguljärt uttryck (regular expression) eller ibland förkortat till regexp eller regex är en metod för att matcha komplexa strängars mönster som tex en e-postadress. Det finns flera funktioner i PHP som använder reguljära uttryck och vi kommer att använda PREG_MATCH (perform a regular expression match) för att ange ett mönster som epostadresser måste följa för att vara giltiga.
Läs mer om PREG_MATCH hos PHP.net Öppnas i nytt fönster (Open in new window) 

 

TIPS! Regular expressions är ett stort område som egentligen kräver en egen guide.

Om du är intresserad av att lära dig mer kan du göra det hos:
http://www.regular-expressions.info Öppnas i nytt fönster (Open in new window) 

...där det även finns ett avsnitt som anknyter till vårt exempel om e-postadresser:
http://www.regular-expressions.info/email.html Öppnas i nytt fönster (Open in new window) 

 

Att validera en epostadress kan göras genom att först kontrollera om tecknet @ finns angivet. Nästa steg är att kontrollera uppbyggnaden av e-postadressen som ofta är name@domain.suffix vilket i vårt exempel är lisa@dromvavaren.se men i verkligheten skulle kunna vara andra varianter:

lisa@drömvavaren.se
lisa@dromvavaren.com
lisa@inkop.dromvavaren.se
lisa@inköp.drömvavaren.se
lisa.johansson@dromvavaren.se
lisa_johansson@dromvavaren.se
lisa@dromvavaren.org.uk

Idag kan ju även åäö och vissa andra sk "specialtecken" användas och även toppdomänerna som förut var två eller tre tecken som tex: .SE .COM .NET kan idag vara upp till sex tecken då nya toppdomäner tillkommit som tex .MUSEUM .INFO .TRAVEL .JOBS .MOBI mfl.

Dessutom finns förslag på att domännamn som förut bara använde ASCII-tecken ska kunna innehålla Internationalized Domain Names (IDNs) som använder lokala teckenuppsättningar specifikt för olika länder och språk som tex arabiska och kinesiska.

Som du förstår är det omöjligt att ange ett reguljärt urtryck som innefattar alla kombinationer av domännamn med de olika specialtecken som finns. Om du anger ett mönster som är FÖR specifikt kan du utestänga många e-postadresser och om du istället anger ett för allmänt mönster kommer ogiltiga e-postadresser att kunna användas medvetet eller omedvetet av avsändaren. Det viktiga är ju att en kontroll sker av att e-postadressen kan vara giltig än att verifiera att den verkligen finns. Du undviker då förhoppningsvis att användaren av misstag anger en felaktig adress men hindrar inte spambots från att spamma ditt formulär.

OBS! Exemplet nedan är ett förslag på REGEXP men du bör vara medveten om att den inte till 100% täcker alla toppdomäner, specialtecken, lokala teckenuppsättningar och kombinationer av användarnamn.

Du kan inte heller vara säker på att mailprogrammet ( Sendmail, Qmail, Postfix eller annat) verkligen klarar av de tecken som e-postadressen innehåller. Även om tecknen åäöÅÄÖ är tillåtna i svenska domännamn idag så fungerar de inte i alla webbläsare och inte heller i alla mailprogram.

 

Exemplet nedan visar verifiering av e-postadress där adressen hämtats från formuläret i vårt tidigare exempel och sparats i variabeln $emailcheck för att sedan matchas mot det reguljära uttrycket som angivits i funktionen PREG_MATCH:

// kontrollera om en e-postadress angivits
$emailcheck = $_POST["email"];

preg_match("/^[a-z0-9\å\ä\ö._-]+@[a-z0-9\å\ä\ö.-]+\.[a-z]{2,6}$/i", $emailcheck))

Om vi tittar närmare på vad uttrycket innebär (och tar bort åäö i mönstret) så är exemplet:

/^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i

 

Tecknen A-Z och siffrorna 0-9 är enkla att förstå men de övriga tecknen förklaras här:

/ början och slut på mönstret
^ matcha från start av strängen
$ matcha från slutet av strängen
[] matcha någon av tecknen inom hakparentesen
+ antal tecken som matchas. Plustecken betyder "1 eller fler".
* antal tecken som matchas. Asterisk betyder "0 eller fler".
{2} antal tecken som matchas (exakt 2)
{2,6} antal tecken som matchas (minst 2 och högst 6)
i anger att de angivna tecknen matchas både versalt och gement (OBS! viktigt i vårt exempel). Om inte "i" anges så måste både versaler och gemener av de angivna tecknen anges. Exemplet a-z0-9\å\ä\ö ändras till a-zA-Z0-9\å\Å\ä\Ä\ö\Ö

Om vi delar upp koden i tre delar så blir det tydligare vad varje uttryck egentligen gör.

Del 1:

[a-z0-9._-]+@

... innebär att den del av epostadressen som anges före @ måste innehålla minst ETT tecken (+) som då kan vara bokstäver mellan a-z och siffror mellan 0-9 samt punkt (.) underscore (_) och bindestreck (-).

Inledningen av e-postadressen kan då vara:

lisa@       _lisa@       lisa64@       64-lisa@       lisa.johansson@       lisa_johansson@

Del 2:

[a-z0-9.-]+\.

...innebär att den del av e-postadressen som anges efter @ måste innehålla minst ETT tecken (+) enligt ovan men måste avslutas med en punkt (här anges en backslash som escape-tecken för att ange att punkten inte är en del av koden utan är just tecknet "punkt").

Fortsättningen på e-postadressen kan då vara:

dromvavaren.       inkop.dromvavaren.      inkop-dromvavaren.

Del 3:

[a-z]{2,6}$/i

... innehåller den sista delen av e-postadressen efter det obligatoriska punkt-tecknet. Måste innehålla minst 2 och högst 6 tecken som bara får vara bokstäverna a-z . Notera även bokstaven "i" som ju anger att både VERSALER och gemener omfattas.

Den sista delen av e-postadressen kan då vara:

se    com   info    museum     net    uk    org.uk

 

Lägg till validering serverside med funktionen PREG_MATCH i vårt formmail-exempel enligt nedan.

  1. Vi placerar koden som validerar e-postadressen i "formmail.php" och ersätter kodavsnittet där vi tidigare hade den enkla valideringen av e-postadressen:

    //mer kod ovan...

    // kontrollera om ett Ämne angivits

    if (!$_POST["subject"])
    $errors[] = "
    - ärende i ämnesraden";


    // kontrollera om en e-postadress angivits
    $emailcheck = $_POST["email"];
    if(!preg_match("/^[a-z0-9\å\ä\ö._-]+@[a-z0-9\å\ä\ö.-]+\.[a-z]{2,6}$/i", $emailcheck))
    $errors[] = "
    - din epostadress saknas eller är felaktig";


    // kontrollera om ett Meddelande angivits

    if (!$_POST["message"])
    $errors[] = "
    - inget meddelande har skrivits!";

    //mer kod nedan...

    Klicka här för att se hela koden till exemplet Öppnas i nytt fönster (Open in new window) 


    Om du vill lägga till fler specialtecken än åäö använder du backslash som escape-tecken före varje nytt tecken:

    /^[a-z0-9\å\ä\ö\ü\%._-]+@[a-z0-9\å\ä\ö\ü\%.-]+\.[a-z]{2,6}$/i


  2. Här är vårt exempelformulär (som nu formaterats med CSS) där en korrekt e-postadress nu är angiven och inget felmeddelande bör visas när det skickas:

    Klicka här för att se en textfil med koden till det CSS-formaterade formuläret Öppnas i nytt fönster (Open in new window) 



    ...meddelandet skickas och bekräftelsen skrivs ut:



    ...men om en epostadress som INTE matchar mönstret i PREG_MATCH visas istället vårt felmeddelande:



    Testa valideringen i formuläret i början av denna guide och prova att ange korrekta och ogiltiga epostadresser!

 

 

HTTP_REFERER för kontroll av Formmail

Problemet med spambots (som vi informerade om i avsnittet Enkel validering av formuläret » ovan) kan du minska genom att använda funktionen HTTP_REFERER som kontrollerar att "formmail.php" hämtar uppgifterna från just ditt formulär. HTTP_REFERER hämtar URL:en för den sida som skickar information eller länkar vidare till den aktuella sidan och det är webbläsaren som lagrar informationen (clientside istället för serverside).

OBS! Vissa webbläsare använder inte HTTP_REFERER och brandväggar kan vara inställda på att inte acceptera referers. Användaren kan dessutom själv stänga av funktionen (detsamma gäller ju Javascript) och detta är alltså inte en helt tillförlitlig metod men kan vara ett bra alternativ till att få formuläret spammat. Om du får problem med spam i dina formulär kan du ju använda HTTP_REFERER tillfälligt under en period och sedan ta bort funktionen.

 

  1. Här används HTTP_REFERER för att kontrollera om "formmail.php" anropats från formuläret "contactform.php".

    Observera att en URL kan anges med eller utan "www" och i exemplet anges båda alternativen:

    //kontrollera om scriptet anropas från ditt formulär
    if (($_SERVER['HTTP_REFERER']!= "http://www.youraddress.com/contactform.php")
    && ($_SERVER['HTTP_REFERER']!= "http://youraddress.se/contactform.php"))
    $errors[] = "
    - din användning av vårt Formmail är inte tillåten!";

    Klicka här för att se hela koden till exemplet Öppnas i nytt fönster (Open in new window) 

  2. Om "formmail.php" anropas direkt i webbläsaren utan att du använder ditt formulär visas (förutom de vanliga felmeddelandena) att scriptet anropats på ett felaktigt sätt:



    Testa din HTTP_REFERER genom att stänga och öppna webbläsaren på nytt och skriv in adressen direkt till ditt formmail-script tex: "http://www.youraddress.com/contactform.php". Ditt felmeddelande ska då visas om din webbläsare tillåter referers.

 

SESSIONS för kontroll av Formmail

En annan metod för att minska spam är att använda sessioner som kontrollerar att "formmail.php" hämtar uppgifterna från ditt formulär. Läs mer om sessioner i guiden PHP fortsättning »

Den här metoden startar en session i "contactform.php" som lagrar innehållet i den globala variabeln $_SESSION och i "formmail.php" kontrolleras om variabeln finns eller ej.

  1. Koden som startar sessionen i "contactform.php" måste anges FÖRE all annan kod (läs mer om sessioner i guiden PHP fortsättning » )

    Här anges innehållet i variabeln $_SESSION till "yes" och kontrolleras i scriptet. Du kan ange vad som helst som värde bara du använder samma värde i "formmail.php":

    <?php

    //starta sessionen
    session_start();
    $_SESSION["form_session"] = "yes";

    ?>


    //mer kod nedan..

    Klicka här för att se en textfil med koden till formuläret Öppnas i nytt fönster (Open in new window) 

  2. Sessionen måste startas även i "formmail.php" och då FÖRE all annan kod. Kontroll sker med funktionen ISSET om variabeln $_SESSION har samma innehåll som i "contactform-php". Alla startade sessioner stängs i slutet av koden:

    <?php
    //starta sessionen
    session_start();
    ?>


    //övrig kod startar här...

    //kontrollerar om en session är aktiv
    if (!isset ($_SESSION["form_session"]))
    $errors[] = "
    - din användning av vårt Formmail är inte tillåten!";

    //mer kod här..

    //Stänger sessionen
    session_unset();
    session_destroy();


    ?>

    Klicka här för att se hela koden till exemplet Öppnas i nytt fönster (Open in new window) 

  3. Testa din session genom att fylla i formuläret och skicka det som vanligt:



    Uppdatera webbläsaren med F5 för att köra scriptet igen och starta sessionen på nytt men nu bara i "formmail.php":



    Nu visas felmeddelandet då sessionen inte innehåller $_SESSION["form_session"]:




  4. En nackdel med den här metoden är att formulärfälten töms på allt innehåll om användaren skrivit fel i tex e-postadressen och backar tillbaka till formuläret. All information måste då skrivas på nytt:

 

 

GET_MAGIC_QUOTES_GPC

PHP använder tecknet backslash \ som escape-tecken framför citationstecken (dubbla citationstecken " och enkla citationstecken ' ) i data som skickas från ett formulär. Citationstecken (quotes) i en sträng kan göra så att strängen delas upp.

Exemplet nedan resulterar i en felaktigt uppbyggd sträng som inte visas och dessutom påverkar övrig kod:

echo "Det här tecknet " är ett citationstecken";

Om backslash används som escape-tecken framför citationstecknet så visas strängen med citationstecknet som en del av textsträngen istället för kod:

echo "Det här tecknet \" är ett citationstecken";

Nu visas strängen med citationstecknet:

 

Du kan även använda enkla enkla citationstecken ' istället för dubbla citationstecken " när du omsluter strängen:

echo 'Det här tecknet " är ett citationstecken';

...och tvärtom om du vill visa en enkel fnutt:

echo "Det här tecknet ' är ett citationstecken";

 

PHP har en inställning i konfigurationen som kallas MAGIC_QUOTES_GPC där "gpc" betyder GET, POST och COOKIE och gäller framförallt för information som bearbetas via formulär.

Du kan använda din PHP-info för att kontrollera om din PHP-servers inställning för MAGIC_QUOTES_GPC(läs mer i guiden phpinfo - info om PHP-installation »)

Här visas att magic_guotes_gpc är inaktiverat:

 

Du kan också använda funktionen GET_MAGIC_QUOTES_GPC för att se dina inställningar. Notera att i exemplet nedan används backslash som escape-tecken för att visa citationstecknen i textsträngen vilket behövs då GET_MAGIC_QUOTES_GPCär inaktiverat:

<?php

echo get_magic_quotes_gpc() . " är statusen för \"get_magic_quotes\" ";

?>

Resultatet i webbläsaren:



Läs mer om GET_MAGIC_QUOTES_GPC hos PHP.net Öppnas i nytt fönster (Open in new window) 

 

 

STRIPSLASHES

PHP använder tecknet backslash \ som escape-tecken även framför själva tecknet backslash \.

Om du skriver en sökväg i vårt formulärexempel som tex:

C:\www\dromvavaren\index.php

så kan resultatet bli dubbla backslash i sökvägen (om GET_MAGIC_QUOTES_GPCär aktiverat):

C:\\www\\dromvavaren\\index.php

Om GET_MAGIC_QUOTES_GPC däremot INTE är aktiverat så lägger inte PHP till extra backslashes och sökvägen ändras inte.

Funktionen STRIPSLASHES kan användas för att ta bort de extra backslashes som PHP eventuellt lägger till.
Läs mer om STRIPSLASHES hos PHP.net Öppnas i nytt fönster (Open in new window) 

 

  1. För att kontrollera om GET_MAGIC_QUOTESär aktiverat eller ej kan du använda en IF-sats tillsammans med funktionen GET_MAGIC_QUOTES för att bestämma om de extra backslashes som PHP lagt till skall tas bort:

    // formuläret är korrekt ifyllt och informationen bearbetas

    //kontrollerar om magic_quotes_gpc är aktiverat


    if(get_magic_quotes_gpc()){
         $from = stripslashes($_POST["email"]);
         $subject = stripslashes($_POST["subject"]);
         $name = stripslashes($_POST["name"]);
         $message = stripslashes($_POST["message"]);
         $to = "your@mailaddress.com";
         }
         
         else{
              $from = $_POST["email"];
              $subject = $_POST["subject"];
              $name = $_POST["name"];
              $message = $_POST["message"];
              $to = "your@mailaddress.com";
    }

    Klicka här för att se hela koden till exemplet Öppnas i nytt fönster (Open in new window) 

  2. I exemplet nedan används backslash i fältet "Meddelande":



    If-satsen kontrollerar om MAGIC_QUOTES_GPC är aktiverat eller inte och använder endast funktionen STRIPSLASHES om det är aktiverat:



    Om MAGIC_QUOTES_GPC däremot INTE är aktiverat och vi använt STRIPSLASHESutan att kontrollera detta skulle backslashes tas bort ur sökvägen:



    ...men när vi använt en IF-sats för att kontrollera detta så fungerar detta bra!

TIPS! Du kan skydda ditt formulär mot spamrobotar genom att använda en "captcha" - läs mer i guiden Formmail med CAPTCHA »

 

 

Felsökning om det inte fungerar

Om du får problem med användning av PHP Mail kan du läsa mer i guiden Felsökning i PHP och MySQL »

 

Formmail - hämta färdiga mallar och exempel

Hämta mallarna i guiden Formmail - färdiga mallar »

Mallar som använder funktionen MAIL för att skicka formulärdata till en epostadress. Formulären kontrolleras med validering av att formulärfälten är ifyllda och validering av epostadresser sker med PREG_MATCH och REGEXP. Exemplen innehåller även HTTP_REFERER som en kontroll av att Formmail skickas från just ditt formulär och för att kunna använda citationstecken och backslash som tecken i formulärfälten används GET_MAGIC_QUOTES_GPC tillsammans med STRIPSLASHES.