Avatar billede kongknabe Nybegynder
14. marts 2009 - 22:28 Der er 13 kommentarer

PHP -problem med funktion til validering af email.

Hejsa.

Sidder og prøver at lave en lille email validations function som jeg kan includere og bruge til at validere emailadresser forskellige steder på en side. dette udelukkende for at slippe for at skrive den samme kode igen og igen.

Validations koden ser sådan ud:


function validateEmail($email_to_validate){
    if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email_to_validate)){
        $email_validation = false;
    }else{
        $email_validation = true;
    }
    return $email_validation
}

Og der hvor jeg bruger den ser det sådan ud:

include("php/includes/form_validation.php");
    validateEmail($email);
   
if($email_validation == false){
        $email_error = "Email adressen er ikke gyldig";
    }

Problemet er at if sætningen altid sætter $email_error til "ikke gyldig" uanset hvad der bliver returneret fra min funktion? Jeg har ikek meget PHP erfaring, men det virker på mig som om at if sætningen bliver behandlet før funktionen har nået at sende sit svar retur?
Avatar billede erikjacobsen Ekspert
14. marts 2009 - 22:32 #1
Du skal sikkert bruge den som

include("php/includes/form_validation.php");
 
if(!validateEmail($email)){
        $email_error = "Email adressen er ikke gyldig";
    }


Derudover vil din funktion afvise lovlige email-adresser, men det er måske i orden med dig?
Avatar billede kongknabe Nybegynder
14. marts 2009 - 22:39 #2
Tak for dit svar, men det lader bare til at give det modsatte resultat.. Nu går alle adresser, valide eller ej, igennem!?

Og nej, det er såmænd ikke i orden at den afviser lovlige adresser.. Validations scriptet er et jeg har fundet, men åbenbart ikke et godt et kan jeg forstå.. Har du et bedre?
Avatar billede kongknabe Nybegynder
14. marts 2009 - 22:46 #3
Sorry.. det var en dumme fejl fra mig.. du har jo helt ret.. Tunsind tak for hjælpen! :)


Hvis du har et godt tip til udformningen af selve valideringen hører jeg meget gerne :)
Avatar billede erikjacobsen Ekspert
14. marts 2009 - 22:51 #4
Ja. Hvis adressen ikke indeholder en @, så er det en fejl. Ellers send en mail til adressen, indeholdende et passende link. Hvis der klikkes på linket, så er email-adressen gyldig.

Alle de andre fancy metoder er bare lavet af nørder, der synes det var sjovt, men som ikke har haft tanke for virkeligheden.
Avatar billede kongknabe Nybegynder
14. marts 2009 - 22:55 #5
Hmm.. ikke forstået? En emailadresse SKAL vel indeholde et @!?

Men har også tænkt mig at at sende en mail til aktivering af kontoen, så valideringen er udelukkende for at fange tastefejl :)

Så i øvrigt at du ikke vil have point, og det passer mig helt fint.. har det på præcis samme måde, men følger normalt bare systemet herinde :) (vis du vil have dem er det fint, og hvis du ikke vil er det lige så fint for mig :))
Avatar billede kongknabe Nybegynder
14. marts 2009 - 22:56 #6
Ahh.. nu forstår jeg dig.. Du mener altså at det eneste jeg skal tjekke på er om emailadressen indeholder et @ og kun melde fejl hvis den ikke gør det? - Men bør jeg så ikke også tjekke for punktum og endelse, bare for at være helt sikker?
Avatar billede erikjacobsen Ekspert
14. marts 2009 - 23:05 #7
Du kan checke for en smule mere, ja. Et @ og til højre for det et punktum. Resten behøver du ikke, for det du dermed sikrer dig, er at alle eksisterende, og fremtidige (formentlig) email-adresser accepteres. Du kommer ikke til at afvise lovlige, men måske acceptere ulovlige. En efterfølgende verificering via sendt email sikrer dig.
Avatar billede kongknabe Nybegynder
14. marts 2009 - 23:07 #8
Jeps det giver mening.. Men må ærligt indrømme at jeg ikke helt kan overskue hvad der foregår i den sætning jeg nu bruger til validering... Men må lige prøve at google på det :)

Igen, tak for din hjælp :)
Avatar billede erikjacobsen Ekspert
14. marts 2009 - 23:15 #9
Der er minimum 2 problemer i dit regulære udtryk

1) Du accepterer du xx@xx.dk og xx@xx.com men ikke xx@xx.info
2) Der er ikke ret mange regler for det, der kommer før @, men det du skriver vil indskrænke mulighederne
3) Bruge af ereg-funktionerne frarådes ("obsolete"), hellere preg-funktionerne.

Men uanset: selv om du får ja på en helt korrekt email-adresse, er det ikke sikkert den findes, eller tilhører den der har skrevet den, eller at du i det hele taget kan sende email til den. Den eneste sikre måde er at sende en email, og hvis den så kommer frem, og der er en person i den anden ende, der vil klikke på linker, så er det formentlig ok. Det har du sikkert oplevet flere gange allerede ;)
Avatar billede kongknabe Nybegynder
14. marts 2009 - 23:31 #10
Du har helt ret i at jeg ikke kommer uden om at sende en aktiverings mail for at være helt sikker, men forestil dig følgende senarium:

En bruger kommer til at indtaste sin mail forkert, uden at lægge mærke til det og trykker "opret bruger". Denne person vil nu få en besked om at der er sendt en mail hvorigennem kontoen skal aktiveres og sætter sig til at vente. - Mailen kommer aldrig og brugeren mener nu at det er min sides skyld.  (Sådan reagerer brugere altid :D).

Så for at undgå dette vil jeg gerne bare sikre mig at folk i det mindste har indtastet en valid emailadresse, i håbet om på den måde at få sorteret de fleste fejl fra... (Folk kan selvfølgelig stadig indtaste deres adresse forkert og samtidig indtaste en valid adresse, men jeg reducere muligheden for fejl en smule).

Vil prøve at kigge på preg-funktionen :)
Avatar billede erikjacobsen Ekspert
14. marts 2009 - 23:40 #11
Men det er jo din fejl, hvis brugeren kommer med en helt valid email-adresse, og du ikke vil acceptere den.
Avatar billede kongknabe Nybegynder
15. marts 2009 - 15:35 #12
Det har du helt ret i, men jeg forstod dig lidt som om du mente at jeg slet ikke burde lave et check i PHP, og der mener jeg bare at det kan være med til at øge brugervenligheden, hvis det vel og mærke gøres ordentligt så folk med valide adresser selvfølgelig ikke bliver udelukket :)
Avatar billede erikjacobsen Ekspert
15. marts 2009 - 16:23 #13
Ja. Derfor mit forslag med "@" - så vil du ikke afvise valide.
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