Avatar billede nemlig Professor
05. januar 2010 - 16:20 Der er 10 kommentarer og
1 løsning

Function til tjek af korrekt indtastet email driller

Hejsa. Jeg har denne kode, som driller på en server, der kører PHP version 5.2.9. Selvom jeg indtaster valide email-adresser, returnes FALSE. På en anden server, der også kører version 5.2.9 virker functionen som den skal.

function check_email($email)
{
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) )
{
//Her er kontrol på om domænet eksisterer
}
return FALSE;
}

if(check_email($_POST['email']) === FALSE)
{
$fejl = "Emailadressen er indtastet forkert!";
}
Avatar billede michael_stim Ekspert
05. januar 2010 - 16:28 #1
Men du siger jo at den skal returnere FALSE hvis den er OK.
Avatar billede michael_stim Ekspert
05. januar 2010 - 16:33 #2
Skal du ikke have:

if(dit regex){
return TRUE
}
else{
return FALSE
}
Avatar billede nemlig Professor
05. januar 2010 - 17:32 #3
Jeg kan godt se, hvad du mener.
Koden er heller ikke angivet helt korrekt, da jeg udelod noget domæne-tjek:

Funktion ser sådan her ud og den virker på 25 forskellige installationer:

function check_email($email) {
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
$host = explode('@', $email);
if (function_exists("checkdnsrr")) {
if(checkdnsrr($host[1].'.', 'MX') ) return TRUE;
if(checkdnsrr($host[1].'.', 'A') ) return TRUE;
if(checkdnsrr($host[1].'.', 'CNAME') ) return TRUE;
} else { return TRUE;}
}
return FALSE;
}

Er din pointe, at den skal se sådan her ud:

function check_email($email) {
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) )
{
  $host = explode('@', $email);
  if (function_exists("checkdnsrr")) {
    if(checkdnsrr($host[1].'.', 'MX') ) return TRUE;
    if(checkdnsrr($host[1].'.', 'A') ) return TRUE;
    if(checkdnsrr($host[1].'.', 'CNAME') ) return TRUE;
  } else {
  return TRUE;
  }
} else {
return FALSE;
}
Avatar billede nemlig Professor
05. januar 2010 - 17:39 #4
Næh - nu godkender den knagme alt - uanset, hvad jeg skriver.
hmmmmmm.
Avatar billede michael_stim Ekspert
05. januar 2010 - 18:31 #5
Nok mere noget a lá:

function check_email($email) {
$host = explode('@', $email);
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email) || preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) &&  (checkdnsrr($host[1].'.', 'MX') || checkdnsrr($host[1].'.', 'A') || checkdnsrr($host[1].'.', 'CNAME')))
{
  return TRUE;
}
else {
  return FALSE;
}

OBS. Ikke testet eller noget.
Avatar billede nemlig Professor
05. januar 2010 - 23:35 #6
Tak for input. Det underlige er, at din foreslåede kode i #5 virker på samme måde som min oprindelige i #3. Dvs. din kode virker ikke på den ene installation, hvor min heller ikke virker, men din kode virker på de installationer, hvor min virker.
Jeg når ikke mere nu, men vil i morgen aften lave noget debug.

Tak indtil videre - jeg vender tilbage.
Avatar billede jenz3n Nybegynder
07. januar 2010 - 00:45 #7
Jeg kan varmt anbefale en kollage af mines funktion: http://blog.loevgaard.dk/validering-e-mail-adresse-7/
Jeg tror den har det hele, og jeg benytter den selv jævnligt.
Avatar billede nemlig Professor
07. januar 2010 - 10:53 #8
#7 - Tak for tippet. Det ser spændende ud, og den har også, hvad jeg finder vigtigt, et domæne tjek.

Jeg skal lige arbejde lidt mere med mit eget, da jeg er optaget af, hvorfor det ikke virket ét sted, men gør det alle andre steder.
Avatar billede nemlig Professor
21. februar 2010 - 11:26 #9
michael_stim: Sorry - jeg fik ikke bedt dig om at sende et svar, da jeg vil give dig point for din tålmodige hjælp.

Smid lige en kommentar, og jeg opretter et nyt spørgsmål, så du også kan få point.
Avatar billede michael_stim Ekspert
21. februar 2010 - 11:28 #10
Ellers tak, samler ikke.
Avatar billede nemlig Professor
21. februar 2010 - 11:34 #11
Så siger jeg i hvert fald mange tak. :)
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