Avatar billede bas Forsker
16. marts 2010 - 19:59 Der er 7 kommentarer og
1 løsning

FILTER_VALIDATE_EMAIL

Hej

Jeg er lige ved at prøve at forstå, hvordan PHP filtre virker.
Jeg har en formular, hvor jeg gerne vil validere e-mail feltet vha. FILTER_VALIDATE_EMAIL.

Jeg kigger bl.a. på:
http://net.tutsplus.com/tutorials/php/getting-clean-with-php/

I mit PHP script har jeg bl.a.:

$email = $_POST['email'];

elseif (!filter_var($email,FILTER_VALIDATE_EMAIL)){   
echo "Ugyldigt format i e-mail adressen".;
}

Men jeg mangler vel at angive nogle betingelser for, hvornår
e-mail formatet er korrekt eller hvordan?

http://net.tutsplus.com/tutorials/php/getting-clean-with-php/
står der f.eks.: $value01 = 'test@example.com';

Men det er jo e-mail formatet/syntaksen og ikke en bestemt e-mail adresse jeg ønsker at validere op imod.

Hvordan gør jeg lige det?
Skal $_POST['email']; sættes lig med et e-mail format eller hvordan, og hvordan gøres det i så fald?

Som det er lige nu hos mig, godkender valideringen, at jeg undlader tld.
Det må vel være fordi jeg mangler noget i scriptet.

På forhånd tak.

Venlig hilsen
Martin
Avatar billede public2 Nybegynder
16. marts 2010 - 22:49 #1
FILTER_VALIDATE_EMAIL er en filter funktion der gør præcis som tutorialen siger: den fjerner ikke lovlige E-mail karakterer, som f.eks. parenteser og andre symboler der ikke er tilladt i en mail adresse.

Det du kan gøre er, som du også selv er lidt inde på, er blot at gøre den statiske variabel Nettuts har lavet, til en dynamisk ud fra din form.

Du skriver korrekt:

$email = $_POST['email'];

elseif (!filter_var($email,FILTER_VALIDATE_EMAIL)){ 
    echo "ugyldig mail!";
}

Hvad du så gør hvis du har mange filtre er, at hvis alle går igennem, så indsætter du data i databasen, xml eller hvad du gør med den.

Hvis den ikke går igennem dit mail filter, så kommer beskeden "ugyldig mail" så.

Hvad du ellers kan gøre hvis du flere felter eller som jeg gør det er:

if(filter_var($email,FILTER_VALIDATE_EMAIL)) {
    if(filter_var($value01,FILTER_VALIDATE_INT)) { 
        if(filter_var($value01,FILTER_VALIDATE_URL)) { 
            SQL-STATEMENT-INSERT-INTO 
        } else {
            echo "forkert url";
        }
    } else {
        echo "Ikke tal";
    }
} else {
    echo "ikke en mail";
}

Dette vil så validere alle dine udtryk og kun hvis alle består kan du gøre hvad du ønsker med din data.
Avatar billede bas Forsker
16. marts 2010 - 23:13 #2
Hej public2

Mange tak for dine kommentarer og løsningsforslag.
Hmm, det er en smule mere omstændigt, end jeg forestillede
mig.
Jeg troede, at FILTER_VALIDATE_EMAIL også havde en eller anden form for indbygget validering for, om e-mail syntaksen / formatet var korrekt.

Umiddelbart tror jeg, at jeg i stedet vil bruge regular expression til validering af e-mail formatet.

Jeg vil lige prøve lidt af med:

/* If e-mail is not valid show error message */
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
    show_error("E-mail address not valid");
}

som jeg har fundet her:
http://myphpform.com/prevent-multiple-form-submissions.php

Der findes sikkert mange (og bedre?) løsninger med regular expressions, men jeg vil gerne holde det forholdsvist simpelt.

I første omgang bare et tjekt for, om e-mail har formatet:
Noget før og efter @ et punktum og et tld (hedder det vist).

Men du er kommet med nogle løsningsforslag, og jeg vil gerne give dig points.

Venlig hilsen
Martin
Avatar billede public2 Nybegynder
16. marts 2010 - 23:20 #3
Ja Reg. Ex. er klart en måde mange bruger og ved ikke om der er bedre og værre løsninger. Jeg foretrækker selv at lave det i PHP frem for JavaScript, men det er en smagsag og må da også indrømme, at jeg til tider bruger JavaScript med AJAX (og reg.ex) til at lave mine valideringer.

Men ellers kan du vente med tålmodighed på at HTML5 bliver en ny standard, der er indbygget filtre i, men det kan jo godt tage lidt tid med alt det bureaukrati :-)
Avatar billede bas Forsker
16. marts 2010 - 23:36 #4
Ja, jeg tror jeg holder mig til Reg. Ex. i denne sammenhæng.

Jeg bruger nok nedenstående i stedet. Jeg kom i tanke om, at jeg havde lidt forskelligt på PC'en ;-)

elseif(!preg_match("^[a-zA-ZæøåÆØÅ0-9._-]+@[a-zA-ZæøåÆØÅ0-9-]+\.[a-zA-ZæøåÆØÅ.]{2,}$^", $email))

Den jeg henviste til før, tillader, at man kun sætter ét tegn efter punktummet. Det kan sikkert laves om, jeg ved bare ikke hvordan.

Der er vist noget med at mailfunktionen mail() ikke er så glad for æ ø og å, så måske skulle jeg pille disse bogstaver ud af preg_match'en?

Ja, det er lidt spændende med HTML 5. Jeg var ikke klar over det med filtre, men det med video tag'et er da også lidt interessant ;-)
Avatar billede public2 Nybegynder
17. marts 2010 - 00:05 #5
Uhh lige omkring ÆØÅ der må du lige få lidt ekspert hjælp af en reg.ex. person, for den sidder ikke lige på rygraden af mig, men mon ikke der er en løsning, ellers kan det være det skal være den unicodede form for æøå / ÆØÅ man skal sætte i, det er jeg ikke klar over.

Men ellers så kan du jo køre nogle test med det, så finder du i hvert fald ud af om det virker :-)

Og ja, HTML5 bliver sgu spændende, glæder mig også som et lille barn til det begynder at kunne bruges i alle større browsere, så man kan få reduceret lidt i koderne :-)
Avatar billede bas Forsker
17. marts 2010 - 15:29 #6
Helt i orden. Jeg kigger nok lidt rundt omkring på nettet og tester lidt forskelligt.

Ja, det blive nok cool nok med HTML 5 ;-)

Takker for hjælpen ;-)

Poster du et svar for points?

Venlig hilsen
Martin
Avatar billede public2 Nybegynder
17. marts 2010 - 15:33 #7
Jep og glad for at jeg kunne hjælpe :-)
Avatar billede bas Forsker
17. marts 2010 - 15:36 #8
Ja, det er rart med nogle hjælpsomme personer.


Mht. HTML 5 har jeg lige netop læst, at IE9 er til download i en beta:

Indlæg i webdesign-nyhedsgruppen:

"http://ie.microsoft.com/testdrive/

Af nyheder vil det sikkert glæde mange her at der både er support for
HTML 5 og SVG.
Betaen kan installeres ved siden af eksisterende IE versioner.
En hurtig test hos W3Schools viser at SVG understøttelsen er komplet.
I hvertfald virker alle deres demoer."

Venlig hilsen
Martin
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester